直前3期間を確認する
LAG() と LEAD() ウィンドウ関数を使うと、時間方向にそれぞれ過去・未来を参照できます。これにより、期間ごとのデータを1本の簡潔なクエリで比較できます。LAG() や LEAD() の各呼び出しは、NULL か単一行を返します。複数期間前を見たい場合は、LAG() や LEAD() を複数回呼び出します。
この演習では、2019年7月のうち、7月2日から7月31日までの期間について、インシデント種別1と2それぞれの日別のセキュリティインシデント件数を比較します。マネジメントは、種別ごとに過去2日から始めて1日先までのローリング4日間ウィンドウで大きな傾向がないかを確認したいと考えています。
この演習はコースの一部です
SQL Serverで学ぶ時系列分析
演習の手順
- 2期間前の件数を返す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;