Kom igångKom igång gratis

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

Visa kurs

Övningsinstruktioner

  • Beräkna antalet dagar sedan den senaste incidenten med en kombination av DATEDIFF() och LAG() eller LEAD().
  • Beräkna antalet dagar till nästa incident med en kombination av DATEDIFF() och LAG() eller LEAD().
  • OBS: du behöver inte använda kolumnen NumberOfIncidents i 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;
Redigera och kör kod