Zacznij terazZacznij za darmo

Obliczanie liczby dni między zdarzeniami

W poprzednich dwóch ćwiczeniach mogło rzucić ci się w oczy, że zdarzenia nie występują każdego dnia tygodnia. Określanie wyniku LAG() i LEAD() jako „poprzedniego dnia" jest więc nieco mylące – chodzi raczej o „poprzedni okres". Ktoś z kierownictwa również to zauważył i pod koniec lipca chciał wiedzieć, ile dni upływa między kolejnymi zdarzeniami. Obliczymy zatem dwie wartości: liczbę dni od poprzedniego zdarzenia oraz liczbę dni do następnego zdarzenia.

Przypominamy, że DATEDIFF() oblicza różnicę między dwiema datami. Możemy połączyć tę funkcję z LAG() i LEAD(), aby uzyskać potrzebne wyniki.

To ćwiczenie jest częścią kursu

Analiza szeregów czasowych w SQL Server

Zobacz kurs

Instrukcje do ćwiczenia

  • Oblicz liczbę dni od ostatniego zdarzenia, łącząc DATEDIFF() z LAG() lub LEAD().
  • Oblicz liczbę dni do następnego zdarzenia, łącząc DATEDIFF() z LAG() lub LEAD().
  • UWAGA: w tym ćwiczeniu nie będziesz korzystać z kolumny NumberOfIncidents.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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;
Edytuj i uruchom kod