Aantal dagen tussen incidenten berekenen
Iets wat je misschien in de vorige twee oefeningen hebt gemerkt, is dat we niet op elke dag van de week incidenten hebben. LAG() en LEAD() de "vorige dag" noemen is dus een beetje misleidend; het is eigenlijk de "vorige periode". Iemand van het management viel dit ook op en wilde eind juli weten hoeveel dagen er tussen incidenten zaten. Om dit te doen, berekenen we twee waarden: het aantal dagen sinds het vorige incident en het aantal dagen tot het volgende incident.
Onthoud dat DATEDIFF() het verschil tussen twee datums geeft. We kunnen dit combineren met LAG() en LEAD() om onze resultaten te krijgen.
Deze oefening maakt deel uit van de cursus
Tijdreeksanalyse in SQL Server
Oefeninstructies
- Bereken het aantal dagen sinds het laatste incident met een combinatie van
DATEDIFF()enLAG()ofLEAD(). - Bereken het aantal dagen tot het volgende incident met een combinatie van
DATEDIFF()enLAG()ofLEAD(). - LET OP: je hoeft de kolom
NumberOfIncidentsin deze oefening niet te gebruiken.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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;