SQL analítico · guía rápida

LEAD

Devuelve un valor de una fila posterior dentro de una ventana. Resulta útil para comparar cada registro con el siguiente evento de una secuencia.

Lectura: 6–8 minEjemplo paso a pasoPráctica con pistas
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

Estructura
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

Pedidos de la clienta 1
idfechatotal
1012025-05-02128.4
1032025-05-1024.9
1112025-06-01249.0
SQL
SELECT id,
       fecha,
       total,
       LEAD(fecha) OVER (ORDER BY fecha, id) AS fecha_siguiente
FROM pedidos
WHERE cliente_id = 1
ORDER BY fecha, id;
Resultado
idfechatotalfecha_siguiente
1012025-05-02128.42025-05-10
1032025-05-1024.92025-06-01
1112025-06-01249.0NULL

Cómo leer el resultado

  1. La primera fila recibe la fecha de la segunda.
  2. La segunda recibe la fecha de la tercera.
  3. La última no tiene una fila siguiente y devuelve NULL.
  4. El resultado mantiene los tres pedidos originales.

Reiniciar la secuencia por grupo

Siguiente pedido de cada cliente
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

Básica · secuencia determinista

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.

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

  • LEAD lee un valor de una fila posterior sin ocultar la fila actual.
  • El orden dentro de OVER define qué significa «siguiente».
  • Añade un desempate estable cuando el criterio de orden pueda repetirse.
  • La última fila recibe NULL o 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.