НачатьНачать бесплатно

Вычисление количества дней между инцидентами

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