SQL Academy · บทเรียน

รายงานวันที่ที่พบบ่อย (MTD, WoW, YoY)

สร้างรายงานตั้งแต่ต้นเดือน สัปดาห์เทียบสัปดาห์ และปีเทียบปีด้วย date_trunc และการเชื่อมตารางเข้ากับตัวเองหรือฟังก์ชันหน้าต่าง

บทเรียน 4 จาก 413 ขั้นตอน

รายงานวันที่ที่พบบ่อย (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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การคำนวณวันที่และ INTERVAL
  2. EXTRACT, DATE_TRUNC, AGE
  3. เขตเวลา: TIMESTAMP เทียบกับ TIMESTAMPTZ
  4. รายงานวันที่ที่พบบ่อย (MTD, WoW, YoY)
← กลับไปที่ SQL Academy