CommencerCommencez gratuitement

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>
Voir le cours

Instructions de l’exercice

  • Calculez les jours écoulés depuis le dernier incident en combinant DATEDIFF() avec LAG() ou LEAD().
  • Calculez les jours restants jusqu’au prochain incident en combinant DATEDIFF() avec LAG() ou LEAD().
  • REMARQUE : vous n’aurez pas besoin d’utiliser la colonne NumberOfIncidents dans 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;
Modifier et exécuter le code