Deduplication
กำจัดข้อมูลซ้ำ · ลูกค้า 1 คนต้องเหลือแค่ 1 แถวล่าสุด
ถ้าเราดึงข้อมูลลูกค้ามา append กันทุกวัน ตารางจะซ้ำกันพร่ำเหรื่อ เพราะข้อมูลเก่าไม่ถูกลบทิ้ง ลูกค้าคนเดียวกันเลยมีหลายแถว โดยที่เราอยากได้แค่ "เวอร์ชันล่าสุด" ของแต่ละคน
หัวใจของโจทย์นี้คือ window function ROW_NUMBER() จับคู่กับ QUALIFY จุดเด่นของ Databricks SQL คือเขียนสั้นและอ่านง่ายกว่า subquery แบบเก่า
| customer_id | updated_at | |
|---|---|---|
| 1021 | a@mail.com | 2026-03-01 |
| 1021 | a@mail.com | 2026-03-08 |
| 1021 | a@mail.com | 2026-03-15 |
| 1022 | b@mail.com | 2026-03-02 |
| customer_id | updated_at | |
|---|---|---|
| 1021 | a@mail.com | 2026-03-15 |
| 1022 | b@mail.com | 2026-03-02 |
SELECT *
FROM customers
QUALIFY
ROW_NUMBER() OVER (
PARTITION BY customer_id -- แบ่งกลุ่มตามลูกค้า
ORDER BY updated_at DESC -- เอาข้อมูลใหม่สุดมาก่อน
) = 1; -- เก็บแค่แถวแรกของแต่ละคน