Обчислення кількості днів між інцидентами
Можливо, у двох попередніх вправах ви помітили, що інциденти трапляються не щодня, тож називати LAG() і LEAD() «попереднім днем» трохи некоректно; точніше — «попереднім періодом». Керівництво теж це помітило і наприкінці липня попросило дізнатися кількість днів між інцидентами. Для цього ми обчислимо два значення: кількість днів від попереднього інциденту та кількість днів до наступного інциденту.
Нагадаємо, що DATEDIFF() повертає різницю між двома датами. Ми можемо поєднати це з LAG() і LEAD(), щоб отримати потрібні результати.
Ця вправа є частиною курсу
Аналіз часових рядів у SQL Server
Інструкції до вправи
- Обчисліть кількість днів від останнього інциденту, поєднавши
DATEDIFF()зLAG()абоLEAD(). - Обчисліть кількість днів до наступного інциденту, поєднавши
DATEDIFF()зLAG()абоLEAD(). - ПРИМІТКА: у цій вправі вам не знадобиться стовпчик
NumberOfIncidents.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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;