LAG e LEAD

Funzioni finestra che leggono un valore dalla riga precedente (LAG) o successiva (LEAD), senza un self-join.

Sintassi

LAG(column [, offset [, default]]) OVER ([PARTITION BY …] ORDER BY …)
LEAD(column [, offset [, default]]) OVER ([PARTITION BY …] ORDER BY …)
  • offset indica di quante righe indietro o avanti andare (predefinito 1). default sostituisce il NULL agli estremi.

Esempio

SELECT order_id, order_date, LAG(order_date) OVER (ORDER BY order_id) AS prev_date FROM orders ORDER BY order_id;

Ogni ordine con la data dell'ordine precedente; il primo ordine ha NULL.

Tabelle usate: orders. Provalo in una lezione qui sotto.

Errori comuni

  • Senza ORDER BY dentro OVER, il risultato dipende dall'ordine delle righe e non è affidabile.
  • Aggiungi PARTITION BY quando il confronto deve restare dentro un gruppo, per esempio un singolo cliente.

Esercitati