LAG
Devuelve el valor de la fila situada offset filas antes de la actual en la partición de la ventana.
MySQL 8.4
LAG(column[, offset[, default]])- [ ]parte opcional
- column
- Columna o expresión cuyo valor se toma de la fila anterior
- offset
- Cuántas filas hacia atrás; número entero no negativo; por defecto, 1INTOpcional
- default
- Valor si no existe una fila con ese desplazamiento; por defecto, NULLOpcional
Valor devuelto
Valor del tipo de column; default o NULL si no existe una fila con ese desplazamiento, por ejemplo en la primera fila de una partición
Ejemplos
Desplazamiento de una y dos filas hacia atrás
MySQL 8.4
SELECT member_name,
birthday,
LAG(member_name) OVER (
ORDER BY birthday
) AS previous_member,
LAG(member_name, 2, 'none') OVER (
ORDER BY birthday
) AS two_rows_back
FROM FamilyMembers;Días desde el pago anterior de cada miembro de la familia
MySQL 8.4
SELECT family_member,
date,
DATEDIFF(
date,
LAG(date) OVER (
PARTITION BY family_member
ORDER BY date
)
) AS days_since_previous
FROM Payments;Detalles
Un uso típico es comparar una fila con la anterior: la diferencia x - LAG(x) OVER (...) o DATEDIFF(date, LAG(date) OVER (...)) muestra el cambio desde la fila anterior. default solo se usa si no existe una fila con ese desplazamiento; si existe pero contiene NULL, el resultado es NULL.