LAG e LEAD
Funções de janela que leem um valor da linha anterior (LAG) ou da próxima (LEAD), sem uma autojunção.
Sintaxe
LAG(column [, offset [, default]]) OVER ([PARTITION BY …] ORDER BY …)LEAD(column [, offset [, default]]) OVER ([PARTITION BY …] ORDER BY …)
- offset indica quantas linhas para trás ou para frente (o padrão é 1). default substitui o NULL nas extremidades.
Exemplo
SELECT order_id, order_date, LAG(order_date) OVER (ORDER BY order_id) AS prev_date FROM orders ORDER BY order_id;
Cada pedido com a data do pedido anterior; o primeiro pedido tem NULL.
Tabelas usadas: orders. Experimente em uma lição abaixo.
Erros comuns
- Sem ORDER BY dentro de OVER, o resultado depende da ordem das linhas e não é confiável.
- Adicione PARTITION BY quando a comparação precisar ficar dentro de um grupo, como um cliente.