0Pricing
SQL Academy · Lezione

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 corrente
  • LEAD(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

  1. OVER, PARTITION BY, ORDER BY
  2. ROW_NUMBER, RANK, DENSE_RANK
  3. LAG, LEAD e pattern delle serie temporali
  4. Totali progressivi e medie mobili
← Torna a SQL Academy