สร้าง stream ของเหตุการณ์
ในแบบฝึกหัดก่อนหน้า เราแยกข้อมูลสปาประจำวันออกเป็น stream ของการเข้าและออก การ unpivot ข้อมูลช่วยให้เราก้าวไปสู่ขั้นตอนถัดไป ซึ่งก็คือการเรียงลำดับ stream ทั้งหมด
ผลลัพธ์จากแบบฝึกหัดก่อนหน้าถูกเก็บไว้ในตารางชั่วคราวชื่อ #StartStopPoints โดยตารางนี้มีคอลัมน์ได้แก่ CustomerID, TimeUTC, EntryCount และ StartOrdinal คอลัมน์เหล่านี้เท่านั้นที่ต้องใช้ในแบบฝึกหัดนี้ โดย TimeUTC แทนเวลาของเหตุการณ์ EntryCount บ่งบอกถึงการเปลี่ยนแปลงสุทธิของเหตุการณ์ (+1 หรือ -1) และ StartOrdinal ปรากฏสำหรับเหตุการณ์การเข้า พร้อมระบุลำดับการเข้า
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาใน SQL Server
คำแนะนำการฝึกหัด
- ใส่ window function ที่เหมาะสม (
ROW_NUMBER()) เพื่อสร้าง stream ของการ check-in และ check-out ตามลำดับเวลา - Partition ตาม customer ID เพื่อคำนวณผลลัพธ์รายผู้ใช้
- เรียงลำดับตามเวลาของเหตุการณ์ และแก้ไขกรณีที่มีค่าเท่ากันโดยใช้ค่า start ordinal
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
SELECT s.*,
-- Build a stream of all check-in and check-out events
___() OVER (
-- Break this out by customer ID
PARTITION BY s.___
-- Order by event time and then the start ordinal
-- value (in case of exact time matches)
ORDER BY s.___, s.___
) AS StartOrEndOrdinal
FROM #StartStopPoints s;