ПочатиПочніть безкоштовно

Обчислення кількості днів між інцидентами

Можливо, у двох попередніх вправах ви помітили, що інциденти трапляються не щодня, тож називати 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;
Редагувати та запускати код