Beräkna antalet dagar mellan incidenter
Något du kanske lade märke till i de två föregående övningarna är att det inte alltid förekommer incidenter varje dag i veckan. Att kalla LAG() och LEAD() för "föregående dag" är därför lite missvisande – det handlar egentligen om "föregående period". Någon i ledningen uppmärksammade detta och ville i slutet av juli veta hur många dagar det gick mellan incidenterna. Vi beräknar därför två värden: antalet dagar sedan den senaste incidenten och antalet dagar till nästa incident.
Kom ihåg att DATEDIFF() ger skillnaden mellan två datum. Vi kan kombinera detta med LAG() och LEAD() för att få fram resultaten.
Den här övningen är en del av kursen
Tidsserieanalys i SQL Server
Övningsinstruktioner
- Beräkna antalet dagar sedan den senaste incidenten med en kombination av
DATEDIFF()ochLAG()ellerLEAD(). - Beräkna antalet dagar till nästa incident med en kombination av
DATEDIFF()ochLAG()ellerLEAD(). - OBS: du behöver inte använda kolumnen
NumberOfIncidentsi den här övningen.
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 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;