0Pricing
SQL Academy · Leçon

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
  • FILTER pour les regroupements parallèles par période
  • generate_series + LEFT JOIN pour compléter les jours manquants
  • LAG pour 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

  1. Arithmétique des dates et INTERVAL
  2. EXTRACT, DATE_TRUNC, AGE
  3. Fuseaux horaires : TIMESTAMP contre TIMESTAMPTZ
  4. Rapports courants sur les dates (MTD, WoW, YoY)
← Retour à SQL Academy