การคำนวณจำนวนวันที่ผ่านไประหว่างเหตุการณ์
จากสองแบบฝึกหัดที่ผ่านมา จะเห็นว่าไม่ได้มีเหตุการณ์เกิดขึ้นทุกวัน ดังนั้นการเรียก LAG() และ LEAD() ว่าเป็น "วันก่อนหน้า" จึงอาจทำให้เข้าใจผิดได้ เพราะจริงๆ แล้วหมายถึง "ช่วงเวลาก่อนหน้า" ทีมผู้บริหารสังเกตเห็นจุดนี้เช่นกัน และต้องการทราบจำนวนวันระหว่างเหตุการณ์แต่ละครั้งในช่วงปลายเดือนกรกฎาคม เราจึงต้องคำนวณ 2 ค่า ได้แก่ จำนวนวันนับตั้งแต่เหตุการณ์ครั้งก่อน และจำนวนวันจนถึงเหตุการณ์ครั้งถัดไป
จำไว้ว่า 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;