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.