การคำนวณผลรวมสะสมด้วย SUM()
หนึ่งในการใช้งาน window function ที่มีประสิทธิภาพมากที่สุดคือการคำนวณผลรวมสะสม (running total) ซึ่งเป็นการนับค่าสะสมต่อเนื่องของข้อมูลในช่วงเวลาหนึ่ง ในแบบฝึกหัดนี้ เราต้องการใช้ window function เพื่อนับจำนวนเหตุการณ์ที่เกิดขึ้นในแต่ละวันและแต่ละประเภทเหตุการณ์ในเดือนกรกฎาคม 2019 พร้อมกับคำนวณผลรวมสะสมของจำนวนเหตุการณ์จำแนกตามประเภท โดยใช้ window function เพียงหนึ่งคิวรีในการแก้ปัญหานี้
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาใน SQL Server
คำแนะนำการฝึกหัด
- เติม window function ที่ถูกต้อง
- เติมคำสั่ง
PARTITION BYใน window function โดย partition ตาม ID ประเภทเหตุการณ์ - เติมคำสั่ง
ORDER BYใน window function โดยเรียงลำดับตามวันที่เกิดเหตุการณ์ (ค่าเริ่มต้น คือ เรียงจากน้อยไปมาก)
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
SELECT
ir.IncidentDate,
ir.IncidentTypeID,
ir.NumberOfIncidents,
-- Get the total number of incidents
___(ir.NumberOfIncidents) OVER (
-- Do this for each incident type ID
PARTITION BY ir.___
-- Sort by the incident date
ORDER BY ir.___
) AS NumberOfIncidents
FROM dbo.IncidentRollup ir
INNER JOIN dbo.Calendar c
ON ir.IncidentDate = c.Date
WHERE
c.CalendarYear = 2019
AND c.CalendarMonth = 7
AND ir.IncidentTypeID IN (1, 2)
ORDER BY
ir.IncidentTypeID,
ir.IncidentDate;