เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การคำนวณจำนวนวันที่ผ่านไประหว่างเหตุการณ์

จากสองแบบฝึกหัดที่ผ่านมา จะเห็นว่าไม่ได้มีเหตุการณ์เกิดขึ้นทุกวัน ดังนั้นการเรียก 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;
แก้ไขและรันโค้ด