インシデント間の経過日数を計算する
前の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;