計算事故之間經過的天數
你可能在前兩個練習中注意到,並不是每週的每天都有事故發生,因此把 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;