Report comuni sulle date (MTD, WoW, YoY)
Costruisca report dall’inizio del mese, settimana su settimana e anno su anno con date_trunc e self-join o funzioni finestra
Report comuni sulle date (MTD, WoW, YoY) è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Tre report classici per periodo
Quasi ogni dashboard aziendale richiede:
- MTD — da inizio mese
- WoW — settimana su settimana
- YoY — anno su anno
Da inizio mese
Somma del mese corrente fino a oggi:
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';Da inizio anno
Lo stesso schema, con granularità annuale:
SELECT SUM(total) AS ytd_revenue
FROM orders
WHERE created_at >= date_trunc('year', NOW());Settimana su settimana
Confrontare questa settimana con la precedente:
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';Anno su anno
Lo stesso periodo confrontato con lo stesso periodo dell'anno scorso:
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.Serie giornaliera senza lacune
Se in un giorno non viene effettuato alcun ordine, GROUP BY lo omette. Generi una serie completa del calendario ed esegua una 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;Totali progressivi
Una funzione finestra calcola una somma progressiva senza self-join:
SELECT day,
revenue,
SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;Differenza tra periodi
Crescita anno su anno usando 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;Ultimi 7 / 30 giorni (finestra mobile)
Finestra mobile o allineata al calendario? Scelga in base a ciò che significa realmente per la sua attività:
-- Trailing 7 days, ending now:
WHERE created_at >= NOW() - INTERVAL '7 days';
-- This calendar week, from Monday:
WHERE created_at >= date_trunc('week', NOW());Considerazioni sui fusi orari
«Oggi» dipende dal fuso orario dell'utente. Converta prima di troncare:
SELECT date_trunc('day', created_at AT TIME ZONE 'America/Los_Angeles') AS la_day,
COUNT(*)
FROM events
GROUP BY 1;Preaggregazione con viste materializzate
Se un report viene eseguito a ogni caricamento della pagina, lo materializzi una volta al giorno. L'argomento è trattato nelle viste materializzate.
Riepilogo
I report per periodo si basano su pochi schemi ricorrenti.
- Intervalli semiaperti con date_trunc
- FILTER per raggruppare periodi in parallelo
- generate_series + LEFT JOIN per riempire le lacune giornaliere
- LAG per le differenze tra periodi
Verifica rapida
Quale espressione indica «il primo istante di questo mese»?
Domande Frequenti
La lezione «Report comuni sulle date (MTD, WoW, YoY)» è gratuita?
Sì — il testo completo di «Report comuni sulle date (MTD, WoW, YoY)» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Report comuni sulle date (MTD, WoW, YoY)»?
Costruisca report dall’inizio del mese, settimana su settimana e anno su anno con date_trunc e self-join o funzioni finestra Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Report comuni sulle date (MTD, WoW, YoY)»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Aritmetica delle date e INTERVAL
- EXTRACT, DATE_TRUNC, AGE
- Fusi orari: TIMESTAMP rispetto a TIMESTAMPTZ
- Report comuni sulle date (MTD, WoW, YoY)