LAG y LEAD

Funciones de ventana que leen un valor de la fila anterior (LAG) o de la siguiente (LEAD), sin necesidad de un self-join.

Sintaxis

LAG(column [, offset [, default]]) OVER ([PARTITION BY …] ORDER BY …)
LEAD(column [, offset [, default]]) OVER ([PARTITION BY …] ORDER BY …)
  • offset indica cuántas filas hacia atrás o hacia delante (1 por defecto). default sustituye el NULL de los extremos.

Ejemplo

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

Cada pedido con la fecha del pedido anterior; el primer pedido tiene NULL.

Tablas usadas: orders. Pruébalo en una lección de abajo.

Errores comunes

  • Sin ORDER BY dentro de OVER, el resultado depende del orden de las filas y no es fiable.
  • Añade PARTITION BY cuando la comparación deba quedarse dentro de un grupo, como un mismo cliente.

Practícalo