Calcularea zilelor scurse între incidente
Poate ai observat în exercițiile anterioare că nu avem întotdeauna incidente în fiecare zi a săptămânii, astfel că denumirea „ziua anterioară" pentru LAG() și LEAD() poate fi un pic înșelătoare – este, de fapt, „perioada anterioară". Cineva din conducere a observat și el acest lucru și, la sfârșitul lunii iulie, a dorit să știe numărul de zile dintre incidente. Pentru a obține aceste informații, vom calcula două valori: numărul de zile de la incidentul anterior și numărul de zile până la următorul incident.
Amintește-ți că DATEDIFF() returnează diferența dintre două date. O putem combina cu LAG() și LEAD() pentru a obține rezultatele dorite.
Acest exercițiu face parte din cursul
Analiza seriilor de timp în SQL Server
Instrucțiuni pentru exercițiu
- Calculează numărul de zile de la ultimul incident folosind o combinație între
DATEDIFF()șiLAG()sauLEAD(). - Calculează numărul de zile până la următorul incident folosind o combinație între
DATEDIFF()șiLAG()sauLEAD(). - NOTĂ: nu vei folosi coloana
NumberOfIncidentsîn acest exercițiu.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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;