始める無料で始める

インシデント間の経過日数を計算する

前の2つの演習でお気づきかもしれませんが、インシデントは必ずしも毎日起きるわけではありません。そのため、LAG()LEAD() を「前日」と呼ぶのは少し正確ではなく、実際には「直前期間」と言ったほうが近いです。経営陣もこれに気づき、7月末にインシデント間の日数を知りたいと言いました。そこで、直前のインシデントからの経過日数と、次のインシデントまでの日数の2つを計算します。

DATEDIFF() は2つの日付の差を返すことを思い出してください。これを 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;
コードを編集して実行