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

สร้าง time series ของหนึ่งปี

แบบฝึกหัดนี้มีเป้าหมายเพื่อสร้างชุดของวันในรอบหนึ่งปี โดยต้องใช้ฟังก์ชันด้านเวลาและวันที่ 2 ตัวดังนี้:

  • GETDATE()
  • DATEADD(datepart, number, date)

GETDATE() ใช้ดึงเวลาปัจจุบัน (เช่น 2019-03-14 20:09:14) และ DATEADD(month, 1, GETDATE()) ใช้คำนวณวันที่ปัจจุบันบวกเพิ่มอีกหนึ่งเดือน (เช่น 2019-04-14 20:09:14)

ในการสร้างชุดของวันสำหรับหนึ่งปี จำเป็นต้องใช้ 365 ขั้นตอนการ recursion ดังนั้น ให้เพิ่มจำนวนรอบการวนซ้ำด้วย OPTION (MAXRECURSION n) โดยที่ n แทนจำนวนรอบที่ต้องการ

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

Hierarchical and Recursive Queries in SQL Server

ดูคอร์ส

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

  • กำหนดเวลาปัจจุบันเป็น time
  • เลือก CTE แบบ recursive และรวม anchor member กับ recursive member ด้วยคำสั่งที่ถูกต้อง
  • จำกัดจำนวนรอบการวนซ้ำให้เท่ากับจำนวนวันในหนึ่งปีลบด้วย 1
  • เพิ่มจำนวนรอบการวนซ้ำสูงสุดให้เท่ากับจำนวนวันในหนึ่งปีด้วย OPTION (MAXRECURSION n)

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

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

WITH time_series AS (
	SELECT 
  		-- Get the current time
	    ___ AS time
  	UNION ALL
	SELECT 
	    DATEADD(day, 1, time)
  	-- Call the CTE recursively
	FROM ___
  	-- Limit the time series to 1 year minus 1 (365 days -1)
  	WHERE time < GETDATE() + ___)
    
SELECT time
FROM time_series
-- Increase the number of iterations (365 days)
OPTION(MAXRECURSION ___)
แก้ไขและรันโค้ด