Häufige Datumsberichte (MTD, WoW, YoY)
Erstellen Sie Berichte für den bisherigen Monat, den Wochenvergleich und den Jahresvergleich mit date_trunc sowie Self-Joins oder Window Functions.
Häufige Datumsberichte (MTD, WoW, YoY) ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Drei klassische Zeitraumberichte
Fast jedes Unternehmens-Dashboard benötigt:
- MTD — Monat bis heute
- WoW — Woche im Vergleich zur Vorwoche
- YoY — Jahr im Vergleich zum Vorjahr
Monat bis heute
Summe seit Beginn dieses Monats:
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';Jahr bis heute
Dasselbe Muster mit Jahresgranularität:
SELECT SUM(total) AS ytd_revenue
FROM orders
WHERE created_at >= date_trunc('year', NOW());Woche im Vergleich zur Vorwoche
Vergleichen Sie diese Woche mit der vorherigen:
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';Jahr im Vergleich zum Vorjahr
Der gleiche Zeitraum im Vergleich zum Vorjahreszeitraum:
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.Tägliche Reihe ohne Lücken
Wenn an einem Tag keine Bestellungen eingehen, überspringt GROUP BY diesen Tag. Erzeugen Sie eine vollständige Kalenderreihe und verwenden Sie 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;Laufende Summen
Eine Fensterfunktion berechnet eine laufende Summe ohne Self-Joins:
SELECT day,
revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;Differenz zwischen Zeiträumen
Jahreswachstum im Vergleich zum Vorjahr mit 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;Letzte 7 bzw. 30 Tage (rollierendes Zeitfenster)
Rollierendes Zeitfenster im Vergleich zur kalendarisch ausgerichteten Auswertung. Wählen Sie die Variante, die tatsächlich zu Ihrer Geschäftslogik passt:
-- Trailing 7 days, ending now:
WHERE created_at >= NOW() - INTERVAL '7 days';
-- This calendar week, from Monday:
WHERE created_at >= date_trunc('week', NOW());Überlegungen zu Zeitzonen
„Heute“ hängt von der Zeitzone des Benutzers ab. Wandeln Sie den Wert vor der Trunkierung um:
SELECT date_trunc('day', created_at AT TIME ZONE 'America/Los_Angeles') AS la_day,
COUNT(*)
FROM events
GROUP BY 1;Voraggregation mit materialisierten Sichten
Wenn ein Bericht bei jedem Seitenaufruf ausgeführt wird, materialisieren Sie ihn einmal täglich. Dies wird unter Materialized Views behandelt.
Zusammenfassung
Zeitraumberichte beruhen auf einigen wenigen Mustern.
- Halboffene Intervalle mit date_trunc
- FILTER für parallele Zeitraumbuckets
- generate_series + LEFT JOIN für Tage ohne Lücken
- LAG für Differenzen zwischen Zeiträumen
Kurzer Test
Welcher Ausdruck markiert „den ersten Moment dieses Monats“?
Häufig gestellte Fragen
Ist die Lektion „Häufige Datumsberichte (MTD, WoW, YoY)“ kostenlos?
Ja — der vollständige Text von „Häufige Datumsberichte (MTD, WoW, YoY)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Häufige Datumsberichte (MTD, WoW, YoY)“?
Erstellen Sie Berichte für den bisherigen Monat, den Wochenvergleich und den Jahresvergleich mit date_trunc sowie Self-Joins oder Window Functions. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Häufige Datumsberichte (MTD, WoW, YoY)“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Datumsarithmetik und INTERVAL
- EXTRACT, DATE_TRUNC, AGE
- Zeitzonen: TIMESTAMP vs. TIMESTAMPTZ
- Häufige Datumsberichte (MTD, WoW, YoY)