Voir les trois périodes précédentes
Les fonctions de fenêtre LAG() et LEAD() permettent respectivement de regarder en arrière ou en avant dans le temps. Elles offrent ainsi la possibilité de comparer des données d’une période à l’autre dans une requête simple. Chaque appel à LAG() ou LEAD() renvoie soit NULL, soit une seule valeur. Si vous souhaitez remonter sur plusieurs périodes, vous pouvez inclure plusieurs appels à LAG() ou LEAD().
Dans cet exercice, nous voulons comparer le nombre d’incidents de sécurité par jour pour les types d’incidents 1 et 2 pendant juillet 2019, plus précisément la période allant du 2 juillet au 31 juillet. La direction souhaite voir une fenêtre glissante de quatre jours par type d’incident afin d’identifier d’éventuelles tendances marquantes, en commençant deux jours avant et en regardant un jour après.
Cet exercice fait partie du cours
<cours>Analyse de séries temporelles dans SQL Server</cours>Instructions de l’exercice
- Complétez la requête SQL pour renvoyer le nombre d’incidents survenus il y a deux périodes.
- Complétez la requête SQL pour renvoyer le nombre d’incidents de la période précédente.
- Complétez la requête SQL pour renvoyer le nombre d’incidents de la période suivante.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
SELECT
ir.IncidentDate,
ir.IncidentTypeID,
-- Fill in two periods ago
___(ir.___, ___) OVER (
PARTITION BY ir.IncidentTypeID
ORDER BY ir.IncidentDate
) AS Trailing2Day,
-- Fill in one period ago
___(ir.___, ___) OVER (
PARTITION BY ir.IncidentTypeID
ORDER BY ir.IncidentDate
) AS Trailing1Day,
ir.NumberOfIncidents AS CurrentDayIncidents,
-- Fill in next period
___(ir.___, ___) OVER (
PARTITION BY ir.IncidentTypeID
ORDER BY ir.IncidentDate
) AS NextDay
FROM dbo.IncidentRollup ir
WHERE
ir.IncidentDate >= '2019-07-01'
AND ir.IncidentDate <= '2019-07-31'
AND ir.IncidentTypeID IN (1, 2)
ORDER BY
ir.IncidentTypeID,
ir.IncidentDate;