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.