Rapports courants sur les dates (MTD, WoW, YoY)
Créez des rapports depuis le début du mois, d’une semaine à l’autre et d’une année à l’autre avec date_trunc et des auto-jointures ou des fonctions de fenêtre.
Rapports courants sur les dates (MTD, WoW, YoY) est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Trois rapports classiques par période
Presque tous les tableaux de bord d'entreprise ont besoin des éléments suivants :
- MTD — depuis le début du mois
- Semaine sur semaine — comparaison avec la semaine précédente
- Année sur année — comparaison avec l'année précédente
Depuis le début du mois
Total de ce mois jusqu'à présent :
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';Depuis le début de l'année
Le même schéma, avec une granularité annuelle :
SELECT SUM(total) AS ytd_revenue
FROM orders
WHERE created_at >= date_trunc('year', NOW());Semaine sur semaine
Comparer cette semaine à la précédente :
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';Année sur année
Même période par rapport à la même période l'an dernier :
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.Série quotidienne sans trous
S'il n'y a aucune commande un jour donné, GROUP BY l'ignore. Générez une série calendaire complète et utilisez 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;Totaux cumulés
Une fonction de fenêtrage calcule une somme cumulée sans auto-jointures :
SELECT day,
revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;Écart d'une période à l'autre
Croissance annuelle calculée avec 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 derniers jours (fenêtre glissante)
Fenêtre glissante ou alignée sur le calendrier. Choisissez ce que votre activité signifie réellement :
-- Trailing 7 days, ending now:
WHERE created_at >= NOW() - INTERVAL '7 days';
-- This calendar week, from Monday:
WHERE created_at >= date_trunc('week', NOW());Considérations relatives aux fuseaux horaires
« Aujourd'hui » dépend du fuseau de l'utilisateur. Effectuez la conversion avant la troncature :
SELECT date_trunc('day', created_at AT TIME ZONE 'America/Los_Angeles') AS la_day,
COUNT(*)
FROM events
GROUP BY 1;Pré-agréger avec des vues matérialisées
Si un rapport est exécuté à chaque chargement de page, matérialisez-le une fois par jour. Ce sujet est traité dans Vues matérialisées.
Récapitulatif
Les rapports par période reposent sur quelques schémas.
- Intervalles semi-ouverts avec
date_trunc FILTERpour les regroupements parallèles par périodegenerate_series+LEFT JOINpour compléter les jours manquantsLAGpour les écarts d'une période à l'autre
Vérification rapide
Quelle expression désigne « le premier instant de ce mois » ?
Questions Fréquemment Posées
La leçon « Rapports courants sur les dates (MTD, WoW, YoY) » est-elle gratuite ?
Oui — le texte complet de « Rapports courants sur les dates (MTD, WoW, YoY) » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Rapports courants sur les dates (MTD, WoW, YoY) » ?
Créez des rapports depuis le début du mois, d’une semaine à l’autre et d’une année à l’autre avec date_trunc et des auto-jointures ou des fonctions de fenêtre. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Rapports courants sur les dates (MTD, WoW, YoY) » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Arithmétique des dates et INTERVAL
- EXTRACT, DATE_TRUNC, AGE
- Fuseaux horaires : TIMESTAMP contre TIMESTAMPTZ
- Rapports courants sur les dates (MTD, WoW, YoY)