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

การคำนวณค่าเฉลี่ยเคลื่อนที่

แทนที่จะดูผลรวมสะสมตั้งแต่ต้นจนถึงปัจจุบัน ฝ่ายบริหารต้องการเห็นค่าเฉลี่ยจำนวนเหตุการณ์ในช่วง 7 วันที่ผ่านมา กล่าวคือ เริ่มตั้งแต่ 6 วันก่อนหน้าจนถึงวันปัจจุบัน เนื่องจากการคำนวณนี้อ้างอิงกรอบเวลาที่กำหนดและเปลี่ยนแปลงไปตามคิวรี จึงเรียกว่าค่าเฉลี่ยเคลื่อนที่ (moving average)

SQL Server ไม่รองรับการกำหนดช่วงเวลาใน window function โดยตรง ดังนั้นจะสมมติว่ามีข้อมูลหนึ่งแถวต่อหนึ่งวัน และใช้ clause ROWS แทน

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การวิเคราะห์อนุกรมเวลาใน SQL Server

ดูคอร์ส

คำแนะนำการฝึกหัด

  • เลือก window function ที่ถูกต้องเพื่อคำนวณค่าเฉลี่ยเคลื่อนที่ตั้งแต่ 6 วันก่อนหน้าจนถึงวันปัจจุบัน (แถวปัจจุบัน)
  • กำหนดกรอบของ window โดยระบุ clause ROWS, จำนวนแถวก่อนหน้า (window frame preceding) และแถวถัดไป (window frame following) ให้ครบถ้วน

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

SELECT
	ir.IncidentDate,
	ir.IncidentTypeID,
	ir.NumberOfIncidents,
    -- Fill in the correct window function
	___(ir.NumberOfIncidents) OVER (
		PARTITION BY ir.IncidentTypeID
		ORDER BY ir.IncidentDate
      	-- Fill in the three parts of the window frame
		___ BETWEEN ___ AND ___
	) AS MeanNumberOfIncidents
FROM dbo.IncidentRollup ir
	INNER JOIN dbo.Calendar c
		ON ir.IncidentDate = c.Date
WHERE
	c.CalendarYear = 2019
	AND c.CalendarMonth IN (7, 8)
	AND ir.IncidentTypeID = 1
ORDER BY
	ir.IncidentTypeID,
	ir.IncidentDate;
แก้ไขและรันโค้ด