De drie voorgaande periodes bekijken
De vensterfuncties LAG() en LEAD() geven ons de mogelijkheid om respectievelijk terug of vooruit in de tijd te kijken. Zo kun je periodes onderling vergelijken met één eenvoudige query. Elke aanroep van LAG() of LEAD() retourneert ofwel NULL of één rij. Als je meerdere periodes terug wilt zien, kun je meerdere aanroepen van LAG() of LEAD() opnemen.
In deze oefening willen we het aantal beveiligingsincidenten per dag vergelijken voor incidenttypen 1 en 2 in juli 2019, specifiek de periode van 2 juli tot en met 31 juli. Het management wil per incidenttype een rollend venster van vier dagen zien om te kijken of er significante trends zijn, beginnend twee dagen eerder en één dag vooruitkijkend.
Deze oefening maakt deel uit van de cursus
Tijdreeksanalyse in SQL Server
Oefeninstructies
- Vul de SQL in om het aantal incidenten van twee periodes geleden te retourneren.
- Vul de SQL in om het aantal incidenten van de vorige periode te retourneren.
- Vul de SQL in om het aantal incidenten van de volgende periode te retourneren.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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;