檢視前三個期間
LAG() 和 LEAD() 視窗函式分別能讓我們向時間的後方或前方觀察。這讓我們可以用一個簡潔的查詢,比較相鄰期間的資料。每次呼叫 LAG() 或 LEAD() 都會回傳 NULL 或單一列。如果你想同時看到多個過去期間,可以多次呼叫 LAG() 或 LEAD()。
在這個練習中,你要比較 2019 年 7 月間,事件型別 1 與 2 的每日資安事件數量,範圍從 7 月 2 日到 7 月 31 日。管理階層希望依事件型別查看一個滾動的 4 天視窗,以判斷是否有明顯趨勢:從前兩天開始,並往前看一天。
本練習屬於課程
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;