Contenido de esta guía
Qué significa
LEAD devuelve una expresión tomada de una fila posterior a la actual. Al igual que LAG, se utiliza con OVER y conserva todas las filas del resultado. Para que «siguiente» represente una secuencia reproducible, define el orden dentro de esa ventana.
Cuándo resulta útil
Permite responder preguntas como “¿cuál es la fecha del siguiente pedido?”, “¿qué precio aparece después?” o “¿cuánto falta para el próximo evento?”. Evita tener que unir manualmente una fila con otra cuando la relación depende de una secuencia ordenada.
Idea clave: LEAD no conoce el futuro por sí solo. La fila siguiente se define mediante el ORDER BY de la ventana.
Sintaxis
LEAD(expresion [, desplazamiento [, valor_final]])
OVER (
[PARTITION BY columna]
ORDER BY columna
)El desplazamiento predeterminado es 1. La última fila suele devolver NULL, porque no tiene una fila posterior.
Ejemplo guiado
| id | fecha | total |
|---|---|---|
| 101 | 2025-05-02 | 128.4 |
| 103 | 2025-05-10 | 24.9 |
| 111 | 2025-06-01 | 249.0 |
SELECT id,
fecha,
total,
LEAD(fecha) OVER (ORDER BY fecha, id) AS fecha_siguiente
FROM pedidos
WHERE cliente_id = 1
ORDER BY fecha, id;| id | fecha | total | fecha_siguiente |
|---|---|---|---|
| 101 | 2025-05-02 | 128.4 | 2025-05-10 |
| 103 | 2025-05-10 | 24.9 | 2025-06-01 |
| 111 | 2025-06-01 | 249.0 | NULL |
Cómo leer el resultado
- La primera fila recibe la fecha de la segunda.
- La segunda recibe la fecha de la tercera.
- La última no tiene una fila siguiente y devuelve
NULL. - El resultado mantiene los tres pedidos originales.
Reiniciar la secuencia por grupo
SELECT cliente_id,
id,
fecha,
LEAD(fecha) OVER (
PARTITION BY cliente_id
ORDER BY fecha, id
) AS siguiente_fecha
FROM pedidos
ORDER BY cliente_id, fecha, id;PARTITION BY cliente_id impide que el último pedido de un cliente tome la fecha del primer pedido del cliente siguiente.
Error frecuente
Confundir la siguiente fila con el siguiente valor distinto
LEAD avanza por filas, no por valores únicos. Si dos pedidos tienen la misma fecha, el siguiente registro puede conservar esa misma fecha. Si necesitas el siguiente valor distinto, debes preparar el conjunto de datos antes o aplicar otra estrategia.
Comprueba lo aprendido
Obtén el siguiente salario
Devuelve nombre, salario y salario_siguiente para los empleados de Tecnología. Ordena de menor a mayor salario e incluye id como desempate dentro de la ventana y en la salida.
LEAD debe recibir salario.ORDER BY salario, id dentro de OVER.Solución razonada
SELECT nombre,
salario,
LEAD(salario) OVER (ORDER BY salario, id) AS salario_siguiente
FROM empleados
WHERE departamento = 'Tecnología'
ORDER BY salario, id;| nombre | salario | salario_siguiente |
|---|---|---|
| Diana León | 39000 | 46000 |
| Carlos Peña | 46000 | NULL |
Diana recibe el salario de la fila posterior. Carlos queda al final del orden y obtiene NULL. El id evita que un empate de salarios deje indefinido cuál fila es la siguiente.
Compatibilidad y orden
LEAD forma parte del conjunto habitual de funciones de ventana en motores modernos. SQL Server exige ORDER BY en la cláusula OVER; PostgreSQL permite omitirlo, pero entonces el orden de procesamiento queda sin especificar. Para código portable y reproducible, define siempre el orden de la ventana. Si esas columnas no distinguen todas las filas, añade una clave estable para resolver empates.
El valor predeterminado, el tipo devuelto y opciones avanzadas relacionadas con valores nulos pueden variar. Comprueba la versión del motor cuando necesites algo más que el desplazamiento básico.
Qué debes recordar
LEADlee un valor de una fila posterior sin ocultar la fila actual.- El orden dentro de
OVERdefine qué significa «siguiente». - Añade un desempate estable cuando el criterio de orden pueda repetirse.
- La última fila recibe
NULLo el valor predeterminado que indiques.
Conceptos relacionados
Fuentes técnicas consultadas
Se utilizaron para comprobar la semántica y el orden de las ventanas. La explicación y los ejemplos son originales.