Calcolare i giorni trascorsi tra gli incidenti
Qualcosa che potresti aver notato nei due esercizi precedenti è che non abbiamo sempre incidenti ogni giorno della settimana, quindi chiamare LAG() e LEAD() il "giorno precedente" è un po' fuorviante; in realtà è il "periodo precedente". Anche qualcuno del management se n'è accorto e, a fine luglio, ha voluto sapere il numero di giorni tra un incidente e l'altro. Per farlo, calcoleremo due valori: il numero di giorni dall'incidente precedente e il numero di giorni fino al prossimo incidente.
Ricorda che DATEDIFF() restituisce la differenza tra due date. Possiamo combinarla con LAG() e LEAD() per ottenere i nostri risultati.
Questo esercizio fa parte del corso
Analisi delle serie temporali in SQL Server
Istruzioni dell'esercizio
- Calcola i giorni dall'ultimo incidente usando una combinazione di
DATEDIFF()eLAG()oLEAD(). - Calcola i giorni fino al prossimo incidente usando una combinazione di
DATEDIFF()eLAG()oLEAD(). - NOTA: in questo esercizio non avrai bisogno della colonna
NumberOfIncidents.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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;