Calculer le 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 ; appeler LAG() et LEAD() le « jour précédent » est donc un peu trompeur ; il s’agit plutôt de la « période précédente ». La direction l’a aussi relevé et, fin juillet, a demandé le nombre de jours entre les incidents. Pour cela, 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.
Cet exercice fait partie du cours
<cours>Analyse de séries temporelles dans SQL Server</cours>Instructions de l’exercice
- Calculez les jours écoulés depuis le dernier incident en combinant
DATEDIFF()avecLAG()ouLEAD(). - Calculez les jours restants jusqu’au prochain incident en combinant
DATEDIFF()avecLAG()ouLEAD(). - REMARQUE : vous n’aurez pas besoin d’utiliser 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;