Inizia subitoInizia gratis

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

Visualizza corso

Istruzioni dell'esercizio

  • Calcola i giorni dall'ultimo incidente usando una combinazione di DATEDIFF() e LAG() o LEAD().
  • Calcola i giorni fino al prossimo incidente usando una combinazione di DATEDIFF() e LAG() o LEAD().
  • 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;
Modifica ed esegui il codice