Calcul du nombre de jours écoulés entre les incidents
Vous avez peut-être remarqué dans les deux exercices précédents qu'il n'y a pas toujours des incidents chaque jour de la semaine. Parler du « jour précédent » avec LAG() et LEAD() est donc un peu trompeur : il s'agit plutôt de la « période précédente ». La direction l'a remarqué aussi et, à la fin de juillet, a voulu connaître le nombre de jours entre les incidents. Pour ce faire, nous allons calculer deux valeurs : le nombre de jours depuis l'incident précédent et le nombre de jours jusqu'au prochain incident.
Rappelez-vous que DATEDIFF() donne la différence entre deux dates. Nous pouvons le combiner avec LAG() et LEAD() pour obtenir nos résultats.
Cette activité fait partie du cours
Analyse de séries chronologiques dans SQL Server
Instructions de l’exercice
- Calculez le nombre de jours depuis le dernier incident en combinant
DATEDIFF()avecLAG()ouLEAD(). - Calculez le nombre de jours jusqu'au prochain incident en combinant
DATEDIFF()avecLAG()ouLEAD(). - REMARQUE : vous n'aurez pas besoin de la colonne
NumberOfIncidentsdans cet exercice.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
SELECT
ir.IncidentDate,
ir.IncidentTypeID,
-- Fill in the days since last incident
___(DAY, ___(ir.IncidentDate, 1) OVER (
PARTITION BY ir.IncidentTypeID
ORDER BY ir.IncidentDate
), ir.___) AS DaysSinceLastIncident,
-- Fill in the days until next incident
___(DAY, ir.___, ___(ir.IncidentDate, 1) OVER (
PARTITION BY ir.IncidentTypeID
ORDER BY ir.IncidentDate
)) AS DaysUntilNextIncident
FROM dbo.IncidentRollup ir
WHERE
ir.IncidentDate >= '2019-07-02'
AND ir.IncidentDate <= '2019-07-31'
AND ir.IncidentTypeID IN (1, 2)
ORDER BY
ir.IncidentTypeID,
ir.IncidentDate;