Referencia de funciones

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, 1
INTOpcional
default
Valor si no existe una fila con ese desplazamiento; por defecto, NULL
Opcional

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;
member_namebirthdayprevious_membertwo_rows_back
Headley Quincey1960-05-13<NULL>none
Ernest Forrest1961-09-11Headley Quinceynone
Flavia Quincey1963-02-16Ernest ForrestHeadley Quincey
Constance Forrest1968-09-06Flavia QuinceyErnest Forrest
Andie Quincey1983-06-05Constance ForrestFlavia Quincey
Lela Quincey1985-06-07Andie QuinceyConstance Forrest
Annie Quincey1988-04-10Lela QuinceyAndie Quincey
Wednesday Addams2005-01-13Annie QuinceyLela Quincey

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;
family_memberdatedays_since_previous
12005-02-03<NULL>
12005-02-129
12005-03-1127
12005-04-2040
12005-05-1323
12005-06-0523
12006-01-15224
12006-03-1256
22005-03-18<NULL>
22005-03-235

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.

Véase también

Dónde aprenderlo