Вычисление количества дней между инцидентами
Возможно, вы обратили внимание в предыдущих двух упражнениях, что инциденты происходят не каждый день, поэтому называть результат 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;