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

Просмотр трёх предыдущих периодов

Оконные функции LAG() и LEAD() позволяют заглянуть соответственно назад или вперёд во времени. Это даёт возможность сравнивать данные по периодам в рамках одного простого запроса. Каждый вызов LAG() или LEAD() возвращает либо NULL, либо значение одной строки. Если нужно охватить несколько периодов, достаточно включить несколько вызовов LAG() или LEAD().

В этом упражнении мы хотим сравнить количество инцидентов безопасности по дням для типов инцидентов 1 и 2 за июль 2019 года — конкретно за период с 2 по 31 июля. Руководство хотело бы видеть скользящее четырёхдневное окно по каждому типу инцидентов, чтобы выявить возможные значимые тенденции: начиная с двух дней назад и включая один день вперёд.

Это упражнение является частью курса

Анализ временных рядов в SQL Server

Посмотреть курс

Инструкции к упражнению

  • Заполните SQL-код, чтобы получить количество инцидентов из двух периодов назад.
  • Заполните SQL-код, чтобы получить количество инцидентов из предыдущего периода.
  • Заполните SQL-код, чтобы получить количество инцидентов из следующего периода.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

SELECT
	ir.IncidentDate,
	ir.IncidentTypeID,
    -- Fill in two periods ago
	___(ir.___, ___) OVER (
		PARTITION BY ir.IncidentTypeID
		ORDER BY ir.IncidentDate
	) AS Trailing2Day,
    -- Fill in one period ago
	___(ir.___, ___) OVER (
		PARTITION BY ir.IncidentTypeID
		ORDER BY ir.IncidentDate
	) AS Trailing1Day,
	ir.NumberOfIncidents AS CurrentDayIncidents,
    -- Fill in next period
	___(ir.___, ___) OVER (
		PARTITION BY ir.IncidentTypeID
		ORDER BY ir.IncidentDate
	) AS NextDay
FROM dbo.IncidentRollup ir
WHERE
	ir.IncidentDate >= '2019-07-01'
	AND ir.IncidentDate <= '2019-07-31'
	AND ir.IncidentTypeID IN (1, 2)
ORDER BY
	ir.IncidentTypeID,
	ir.IncidentDate;
Редактировать и запускать код