计算事件之间经过的天数
在前两个练习中,您可能已经注意到并不是每周的每一天都有事件发生,所以把 LAG() 和 LEAD() 称为"前一天"其实有些误导;更准确地说是"前一个期间"。管理层也注意到了这一点,并在 7 月底想知道两次事件之间相隔了多少天。为此,我们将计算两个值:自上一次事件以来的天数,以及距离下一次事件的天数。
回顾一下,DATEDIFF() 可以给出两个日期之间的差值。我们可以把它与 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;