Visa de tre föregående perioderna
Fönsterfunktionerna LAG() och LEAD() gör det möjligt att blicka bakåt respektive framåt i tiden. Det innebär att du kan jämföra data period för period i en enda, enkel fråga. Varje anrop till LAG() eller LEAD() returnerar antingen NULL eller en enda rad. Om du vill se flera perioder bakåt kan du använda flera anrop till LAG() eller LEAD().
I den här övningen vill vi jämföra antalet säkerhetsincidenter per dag för incidenttyperna 1 och 2 under juli 2019 – närmare bestämt perioden från och med den 2 juli till och med den 31 juli. Ledningen vill se ett rullande fyradagarsfönster per incidenttyp för att identifiera eventuella trender, med start två dagar innan och en dag framåt.
Den här övningen är en del av kursen
Tidsserieanalys i SQL Server
Övningsinstruktioner
- Fyll i SQL-koden för att returnera antalet incidenter från två perioder sedan.
- Fyll i SQL-koden för att returnera antalet incidenter från föregående period.
- Fyll i SQL-koden för att returnera antalet incidenter från nästa period.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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;