วิเคราะห์ข้อมูลลูกค้าเพื่อตรวจหาการทุจริต
ในชุดแบบฝึกหัดสุดท้ายนี้ เราจะวิเคราะห์ข้อมูลสปาเพื่อตรวจหาการทุจริตที่อาจเกิดขึ้น บริษัทมอบบัตรผ่านให้ลูกค้าแต่ละรายสำหรับใช้เป็นการส่วนตัว 1 ใบ และบัตรสำหรับแขกอีก 1 ใบ โดยมีข้อมูลการเช็คอินและเช็คเอาต์ของลูกค้าแต่ละราย และบัตรแขกจะผูกกับรหัสลูกค้าหลัก ซึ่งหมายความว่าอาจเกิดการซ้อนทับได้เมื่อลูกค้าและแขกเช็คอินพร้อมกัน เราต้องการตรวจสอบว่ามีรายการที่ซ้อนทับกันอย่างน้อย 3 รายการสำหรับลูกค้าคนเดียวกันหรือไม่ เนื่องจากนั่นจะถือว่าละเมิดกฎของธุรกิจ
แนวคิดสำคัญในการวิเคราะห์รายการที่ซ้อนทับกัน คือการ unpivot ข้อมูลแล้วมองในรูปแบบของสตรีมการเข้าและออก ซึ่งเราจะเริ่มทำในขั้นตอนแรกนี้
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาใน SQL Server
คำแนะนำการฝึกหัด
แยกเหตุการณ์การเริ่มต้นและเหตุการณ์การสิ้นสุดออกจากกัน
- ใส่วันที่เริ่มต้นการเยี่ยมชมของลูกค้า (
dsv.CustomerVisitStart) เป็นTimeUTCในส่วน "entrances" ของคิวรี - ใส่ window function ที่ตั้งนามแฝงว่า
StartStopPointsเพื่อแสดงสตรีมการเช็คอินของลูกค้าแต่ละราย โดยเรียงลำดับตามวันที่เริ่มต้นการเยี่ยมชม - ใส่วันที่สิ้นสุดการเยี่ยมชมของลูกค้า (
dsv.CustomerVisitEnd) เป็นTimeUTCในส่วน "departures" ของคิวรี
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
-- This section focuses on entrances: CustomerVisitStart
SELECT
dsv.CustomerID,
dsv.___ AS TimeUTC,
1 AS EntryCount,
-- We want to know each customer's entrance stream
-- Get a unique, ascending row number
___() OVER (
-- Break this out by customer ID
PARTITION BY dsv.___
-- Ordered by the customer visit start date
ORDER BY dsv.___
) AS StartOrdinal
FROM dbo.DaySpaVisit dsv
UNION ALL
-- This section focuses on departures: CustomerVisitEnd
SELECT
dsv.CustomerID,
dsv.___ AS TimeUTC,
-1 AS EntryCount,
NULL AS StartOrdinal
FROM dbo.DaySpaVisit dsv