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.

Pratique