Lag/Lead กับหน้าต่างกรอบ
ใช้ LAG/LEAD ร่วมกับหน้าต่างกรอบเพื่อคำนวณส่วนต่างระหว่างช่วงเวลาและตรวจจับช่องว่างในอนุกรมเวลา
Lag/Lead กับหน้าต่างกรอบ เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
สรุป LAG/LEAD
LAG(col, n) ส่งคืนค่าที่อยู่ก่อนแถวปัจจุบัน n แถวในหน้าต่าง ส่วน LEAD(col, n) จะดูไปข้างหน้า
SELECT day, revenue,
LAG(revenue) OVER (ORDER BY day) AS prev_day_revenue
FROM daily_revenue;LAG พร้อมค่าเริ่มต้น
อาร์กิวเมนต์ที่สามคือค่าเริ่มต้นเมื่อไม่มีเพื่อนบ้าน:
LAG(revenue, 1, 0) OVER (ORDER BY day)
-- Returns 0 instead of NULL for the very first row.การคำนวณความเปลี่ยนแปลง
การเปลี่ยนแปลงเมื่อเทียบกับวันก่อน:
SELECT day, revenue,
revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;LAG หลายขั้น
เปรียบเทียบกับ N วันที่แล้ว ซึ่งมีประโยชน์สำหรับการเปรียบเทียบสัปดาห์ต่อสัปดาห์และปีต่อปี:
LAG(revenue, 7) OVER (ORDER BY day) -- 7 days ago
LAG(revenue, 365) OVER (ORDER BY day) -- 1 year agoLEAD สำหรับช่วงเวลาที่ใช้คาดการณ์
รูปแบบ “เหตุการณ์ถัดไปคืออะไร”:
SELECT id, ts,
LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) AS next_ts,
LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) - ts AS gap_to_next
FROM events;รูปแบบแยกตามผู้ใช้
LAG/LEAD จะเคารพ PARTITION BY:
SELECT user_id, ts, action,
LAG(action) OVER (PARTITION BY user_id ORDER BY ts) AS prev_action
FROM events;
-- prev_action is the user's previous event, not globally.การตรวจจับการเปลี่ยนสถานะ
รวม LAG กับ CASE:
SELECT id, status,
CASE WHEN status <> LAG(status) OVER (ORDER BY ts) THEN 'changed' ELSE 'same' END
FROM orders;FIRST_VALUE / LAST_VALUE
ค่าแรกหรือค่าสุดท้ายภายในกรอบ:
FIRST_VALUE(status) OVER (PARTITION BY order_id ORDER BY ts) AS first_status
-- The status when the order was first seen.
LAST_VALUE(status) OVER (
PARTITION BY order_id ORDER BY ts
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS final_statusNTH_VALUE
ค่าลำดับที่ N ของหน้าต่างที่เรียงลำดับแล้ว:
NTH_VALUE(revenue, 3) OVER (
ORDER BY revenue DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)
-- Third-highest revenue value.ฟังก์ชันกรอบแยกตามกลุ่ม
รวม LAG กับ PARTITION BY เพื่อหาเพื่อนบ้านแยกตามกลุ่ม:
SELECT user_id, ts, page,
LAG(page) OVER (PARTITION BY user_id ORDER BY ts) AS prev_page,
LEAD(page) OVER (PARTITION BY user_id ORDER BY ts) AS next_page
FROM page_views;ประสิทธิภาพ
ฟังก์ชันหน้าต่างจะเรียงลำดับหนึ่งครั้งต่อพาร์ทิชัน เมื่อพาร์ทิชันมีขนาดใหญ่ ให้สร้างดัชนีคอลัมน์ (PARTITION BY, ORDER BY)
สรุปทบทวน
LAG/LEAD ช่วยให้การเปรียบเทียบระหว่างแถวทำได้อย่างมีประสิทธิภาพ
- ค่าเริ่มต้นช่วยหลีกเลี่ยง NULL
- ใช้ร่วมกับ CASE เพื่อตรวจจับการเปลี่ยนสถานะ
- FIRST_VALUE/LAST_VALUE/NTH_VALUE ช่วยเติมเต็มกลุ่มฟังก์ชันนี้
ตรวจสอบอย่างรวดเร็ว
คุณต้องการให้แต่ละแถวมีช่วงห่างเป็นวินาทีจนถึงเหตุการณ์ถัดไปของผู้ใช้ ควรใช้ฟังก์ชันใด
คำถามที่พบบ่อย
บทเรียน “Lag/Lead กับหน้าต่างกรอบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Lag/Lead กับหน้าต่างกรอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Lag/Lead กับหน้าต่างกรอบ”
ใช้ LAG/LEAD ร่วมกับหน้าต่างกรอบเพื่อคำนวณส่วนต่างระหว่างช่วงเวลาและตรวจจับช่องว่างในอนุกรมเวลา คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “Lag/Lead กับหน้าต่างกรอบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เงื่อนไขกรอบ: ROWS เทียบกับ RANGE
- Lag/Lead กับหน้าต่างกรอบ
- การแบ่งกลุ่มด้วย NTILE และ Cume_Dist
- รูปแบบการทำรายงานจากสถานการณ์จริง