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
Instrukcje do ćwiczenia
- Oblicz liczbę dni od ostatniego zdarzenia, łącząc
DATEDIFF()zLAG()lubLEAD(). - Oblicz liczbę dni do następnego zdarzenia, łącząc
DATEDIFF()zLAG()lubLEAD(). - 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;