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
- Arytmetyka dat i INTERVAL
- EXTRACT, DATE_TRUNC, AGE
- Strefy czasowe: TIMESTAMP a TIMESTAMPTZ
- Typowe raporty dat (MTD, WoW, YoY)