รายงานวันที่ที่พบบ่อย (MTD, WoW, YoY)
สร้างรายงานตั้งแต่ต้นเดือน สัปดาห์เทียบสัปดาห์ และปีเทียบปีด้วย date_trunc และการเชื่อมตารางเข้ากับตัวเองหรือฟังก์ชันหน้าต่าง
รายงานวันที่ที่พบบ่อย (MTD, WoW, YoY) เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
รายงานช่วงเวลาแบบคลาสสิกสามประเภท
แดชบอร์ดธุรกิจเกือบทุกแห่งต้องใช้สิ่งต่อไปนี้:
- MTD — ตั้งแต่ต้นเดือน
- WoW — สัปดาห์ต่อสัปดาห์
- YoY — ปีต่อปี
ตั้งแต่ต้นเดือน
ผลรวมของเดือนนี้จนถึงขณะนี้:
SELECT SUM(total) AS mtd_revenue
FROM orders
WHERE created_at >= date_trunc('month', NOW())
AND created_at < date_trunc('month', NOW()) + INTERVAL '1 month';ตั้งแต่ต้นปี
ใช้รูปแบบเดียวกัน โดยเปลี่ยนความละเอียดเป็นปี:
SELECT SUM(total) AS ytd_revenue
FROM orders
WHERE created_at >= date_trunc('year', NOW());สัปดาห์ต่อสัปดาห์
เปรียบเทียบสัปดาห์นี้กับสัปดาห์ก่อน:
SELECT
SUM(total) FILTER (
WHERE created_at >= date_trunc('week', NOW())
) AS this_week,
SUM(total) FILTER (
WHERE created_at >= date_trunc('week', NOW()) - INTERVAL '1 week'
AND created_at < date_trunc('week', NOW())
) AS last_week
FROM orders
WHERE created_at >= date_trunc('week', NOW()) - INTERVAL '1 week';ปีต่อปี
ช่วงเวลาเดียวกันเทียบกับช่วงเวลาเดียวกันของปีก่อน:
SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
WHERE created_at >= NOW() - INTERVAL '2 years'
GROUP BY 1
ORDER BY 1;
-- Then plot with two lines: current year, previous year.ชุดข้อมูลรายวันที่ไม่มีช่องว่าง
หากไม่มีคำสั่งซื้อในวันใด GROUP BY จะข้ามวันนั้นไป ให้สร้างชุดข้อมูลปฏิทินเต็มชุดแล้วใช้ LEFT JOIN:
SELECT day, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(
CURRENT_DATE - INTERVAL '30 days',
CURRENT_DATE,
INTERVAL '1 day'
) AS day
LEFT JOIN orders o ON date_trunc('day', o.created_at) = day
GROUP BY day
ORDER BY day;ผลรวมสะสม
ฟังก์ชันหน้าต่างคำนวณผลรวมสะสมได้โดยไม่ต้อง JOIN ตารางกับตัวเอง:
SELECT day,
revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;ผลต่างระหว่างช่วงเวลา
การเติบโตแบบปีต่อปีโดยใช้ LAG:
SELECT month,
revenue,
LAG(revenue, 12) OVER (ORDER BY month) AS prev_year,
(revenue - LAG(revenue, 12) OVER (ORDER BY month))
/ NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) AS yoy_growth
FROM monthly_revenue;7 / 30 วันล่าสุด (ช่วงย้อนหลัง)
ช่วงย้อนหลังเทียบกับช่วงที่จัดแนวตามปฏิทิน เลือกความหมายที่ตรงกับธุรกิจของคุณจริง ๆ:
-- Trailing 7 days, ending now:
WHERE created_at >= NOW() - INTERVAL '7 days';
-- This calendar week, from Monday:
WHERE created_at >= date_trunc('week', NOW());ข้อควรพิจารณาเกี่ยวกับเขตเวลา
คำว่า "วันนี้" ขึ้นอยู่กับเขตเวลาของผู้ใช้ ให้แปลงค่าก่อนตัดให้เหลือหน่วย:
SELECT date_trunc('day', created_at AT TIME ZONE 'America/Los_Angeles') AS la_day,
COUNT(*)
FROM events
GROUP BY 1;การรวมข้อมูลล่วงหน้าด้วยมุมมองที่จัดเก็บผลลัพธ์
หากรายงานทำงานทุกครั้งที่โหลดหน้า ให้สร้างผลลัพธ์ไว้ล่วงหน้าวันละครั้ง เนื้อหานี้อธิบายไว้ในบทมุมมองที่จัดเก็บผลลัพธ์
สรุปทบทวน
รายงานตามช่วงเวลาอาศัยรูปแบบสำคัญเพียงไม่กี่แบบ
- ช่วงเวลาแบบเปิดด้านขวาด้วย date_trunc
- FILTER สำหรับแบ่งช่วงเวลาหลายชุดแบบขนาน
- generate_series + LEFT JOIN สำหรับเติมวันที่ที่หายไป
- LAG สำหรับผลต่างระหว่างช่วงเวลา
ตรวจสอบความเข้าใจ
นิพจน์ใดระบุว่าเป็น "ช่วงเวลาแรกของเดือนนี้"
เรียนรู้ SQL ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 46
- บทเรียน
- 183
คำถามที่พบบ่อย
บทเรียน “รายงานวันที่ที่พบบ่อย (MTD, WoW, YoY)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รายงานวันที่ที่พบบ่อย (MTD, WoW, YoY)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รายงานวันที่ที่พบบ่อย (MTD, WoW, YoY)”
สร้างรายงานตั้งแต่ต้นเดือน สัปดาห์เทียบสัปดาห์ และปีเทียบปีด้วย date_trunc และการเชื่อมตารางเข้ากับตัวเองหรือฟังก์ชันหน้าต่าง คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “รายงานวันที่ที่พบบ่อย (MTD, WoW, YoY)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การคำนวณวันที่และ INTERVAL
- EXTRACT, DATE_TRUNC, AGE
- เขตเวลา: TIMESTAMP เทียบกับ TIMESTAMPTZ
- รายงานวันที่ที่พบบ่อย (MTD, WoW, YoY)