0Pricing
SQL Academy · Lekcja

Typowe raporty dat (MTD, WoW, YoY)

Twórz raporty od początku miesiąca, tydzień do tygodnia i rok do roku za pomocą date_trunc oraz złączeń tabeli z samą sobą lub funkcji okienkowych.

Typowe raporty dat (MTD, WoW, YoY) to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Trzy klasyczne raporty okresowe

Niemal każdy pulpit biznesowy potrzebuje:

  • MTD — od początku miesiąca
  • WoW — tydzień do tygodnia
  • YoY — rok do roku

Od początku miesiąca

Suma od początku bieżącego miesiąca:

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';

Od początku roku

Ten sam wzorzec w skali roku:

SELECT SUM(total) AS ytd_revenue
FROM orders
WHERE created_at >= date_trunc('year', NOW());

Tydzień do tygodnia

Porównanie bieżącego tygodnia z poprzednim:

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';

Rok do roku

Ten sam okres w porównaniu z analogicznym okresem ubiegłego roku:

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.

Dzienny szereg bez luk

Jeśli danego dnia nie ma żadnych zamówień, GROUP BY pomija ten dzień. Wygeneruj pełny szereg dat kalendarzowych i użyj 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;

Sumy narastające

Funkcja okna oblicza sumę narastającą bez samozłączeń:

SELECT day,
       revenue,
       SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;

Różnica między okresami

Wzrost rok do roku z użyciem 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;

Ostatnie 7 / 30 dni (ruchomy przedział)

Ruchomy przedział a okres wyrównany kalendarzowo. Wybierz rozwiązanie zgodne z rzeczywistym znaczeniem używanym w Twojej firmie:

-- Trailing 7 days, ending now:
WHERE created_at >= NOW() - INTERVAL '7 days';

-- This calendar week, from Monday:
WHERE created_at >= date_trunc('week', NOW());

Uwzględnianie stref czasowych

„Dzisiaj” zależy od strefy użytkownika. Przed obcięciem przekonwertuj czas:

SELECT date_trunc('day', created_at AT TIME ZONE 'America/Los_Angeles') AS la_day,
       COUNT(*)
FROM events
GROUP BY 1;

Wstępna agregacja za pomocą widoków materializowanych

Jeśli raport jest uruchamiany przy każdym załadowaniu strony, zmaterializuj go raz dziennie. Temat omówiono w sekcji Materialized Views.

Podsumowanie

Raporty okresowe opierają się na kilku wzorcach.

  • Przedziały lewostronnie domknięte i prawostronnie otwarte z date_trunc
  • FILTER do równoległego wyznaczania przedziałów
  • generate_series + LEFT JOIN do uzupełniania dni z brakami
  • LAG do obliczania różnic między okresami

Szybki test

Które wyrażenie oznacza „pierwszy moment bieżącego miesiąca”?

Często zadawane pytania

Czy lekcja „Typowe raporty dat (MTD, WoW, YoY)” jest bezpłatna?

Tak — pełny tekst „Typowe raporty dat (MTD, WoW, YoY)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Typowe raporty dat (MTD, WoW, YoY)”?

Twórz raporty od początku miesiąca, tydzień do tygodnia i rok do roku za pomocą date_trunc oraz złączeń tabeli z samą sobą lub funkcji okienkowych. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Typowe raporty dat (MTD, WoW, YoY)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Arytmetyka dat i INTERVAL
  2. EXTRACT, DATE_TRUNC, AGE
  3. Strefy czasowe: TIMESTAMP a TIMESTAMPTZ
  4. Typowe raporty dat (MTD, WoW, YoY)
← Powrót do SQL Academy