查看前三个区间
LAG() 和 LEAD() 窗口函数分别让我们能够向过去或将来查看数据。这样就可以用一条简单的查询来比较相邻区间的数据。每次调用 LAG() 或 LEAD() 会返回 NULL 或单行结果。若要查看更久之前或之后的多个区间,可以多次调用 LAG() 或 LEAD()。
在本练习中,我们要比较 2019 年 7 月期间(具体为 7 月 2 日到 7 月 31 日)事件类型 1 和 2 的每日安全事件数量。管理层希望按事件类型查看一个滚动 4 天的窗口,以识别是否存在显著趋势:从前推 2 天开始,并向前看 1 天。
本练习是课程的一部分
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;