Výpočet počtu dní mezi incidenty
Možná sis v předchozích dvou cvičeních všiml/a, že incidenty nenastávají každý den v týdnu – označení LAG() a LEAD() jako „předchozí den" proto může být trochu zavádějící; jde spíš o „předchozí období". I vedení si toho všimlo a na konci července chtělo znát počet dní mezi incidenty. Vypočítáme proto dvě hodnoty: počet dní od posledního incidentu a počet dní do dalšího incidentu.
Připomeň si, že DATEDIFF() vrací rozdíl mezi dvěma daty. Kombinací s LAG() a LEAD() snadno získáme požadované výsledky.
Toto cvičení je součástí kurzu
Time Series Analysis in SQL Server
Pokyny k cvičení
- Vypočítej počet dní od posledního incidentu pomocí kombinace
DATEDIFF()aLAG()neboLEAD(). - Vypočítej počet dní do dalšího incidentu pomocí kombinace
DATEDIFF()aLAG()neboLEAD(). - POZNÁMKA: v tomto cvičení sloupec
NumberOfIncidentsnepoužiješ.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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;