สร้าง 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 ___)