LAG, LEAD e pattern delle serie temporali
Confronti ogni riga con quella precedente o successiva usando LAG e LEAD e costruisca differenze tra periodi
LAG, LEAD e pattern delle serie temporali è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 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.
LAG e LEAD: guardare indietro e avanti
Queste funzioni accedono alle righe adiacenti nella finestra:
LAG(col, n, default)— valore n righe prima della riga correnteLEAD(col, n, default)— valore n righe dopo
Riga precedente
Confronti ogni ordine con quello precedente dello stesso utente:
SELECT id, user_id, created_at, total,
LAG(total) OVER (
PARTITION BY user_id ORDER BY created_at
) AS prev_total
FROM orders;Variazione giornaliera
Differenza rispetto al giorno precedente:
SELECT day, revenue,
revenue - LAG(revenue) OVER (ORDER BY day) AS delta
FROM daily_revenue
ORDER BY day;Variazione annuale
LAG con offset 12 su una serie mensile:
SELECT month, revenue,
LAG(revenue, 12) OVER (ORDER BY month) AS prev_year_revenue,
revenue / NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) - 1 AS yoy
FROM monthly_revenue;Rilevare le lacune
Trovi i giorni privi di dati:
WITH d AS (
SELECT day, LAG(day) OVER (ORDER BY day) AS prev_day FROM daily_signups
)
SELECT day, prev_day, day - prev_day AS gap_days
FROM d
WHERE day - prev_day > 1;Creazione delle sessioni
Raggruppi le righe in sessioni quando l'intervallo supera una soglia:
WITH gaps AS (
SELECT user_id, ts,
CASE WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
> INTERVAL '30 min'
THEN 1 ELSE 0 END AS new_session
FROM events
)
SELECT user_id, ts,
SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;Primo e ultimo elemento del gruppo
FIRST_VALUE e LAST_VALUE recuperano i limiti della finestra:
SELECT id, total,
FIRST_VALUE(total) OVER (PARTITION BY user_id ORDER BY created_at) AS first_order,
LAST_VALUE(total) OVER (PARTITION BY user_id ORDER BY created_at
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_order
FROM orders;
-- LAST_VALUE needs the explicit frame, otherwise default frame ends at current row.NTH_VALUE
Selezioni l'ennesimo valore nella partizione:
SELECT id,
NTH_VALUE(total, 2) OVER (
PARTITION BY user_id ORDER BY total DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS second_largest
FROM orders;Valore predefinito nelle serie temporali
Il terzo argomento di LAG è il valore predefinito quando non esiste una riga precedente:
SELECT day, revenue,
revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;
-- delta on first day = revenue itself (vs NULL)Equivalente con self-join
Si potrebbe scrivere LAG come un self-join, ma sarebbe più lento e meno leggibile. Preferisca sempre le funzioni finestra.
Prestazioni
Le funzioni finestra attraversano la partizione una sola volta. Il collo di bottiglia è l'ordinamento: indicizzi le colonne di ORDER BY quando possibile.
Riepilogo
LAG e LEAD consentono il confronto tra righe.
- Riga precedente/successiva all'interno della partizione
- Variazioni, confronti tra periodi, creazione di sessioni
- FIRST_VALUE/LAST_VALUE per i limiti
Verifica rapida
Vuole calcolare la variazione giornaliera dei ricavi. Quale funzione finestra utilizza?
Domande Frequenti
La lezione «LAG, LEAD e pattern delle serie temporali» è gratuita?
Sì — il testo completo di «LAG, LEAD e pattern delle serie temporali» è 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 «LAG, LEAD e pattern delle serie temporali»?
Confronti ogni riga con quella precedente o successiva usando LAG e LEAD e costruisca differenze tra periodi 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 3 di 4.
Quanto tempo richiede la lezione «LAG, LEAD e pattern delle serie temporali»?
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
- OVER, PARTITION BY, ORDER BY
- ROW_NUMBER, RANK, DENSE_RANK
- LAG, LEAD e pattern delle serie temporali
- Totali progressivi e medie mobili