LAG
Возвращает значение из строки, которая стоит на offset строк раньше текущей в разделе окна.
MySQL 8.4
LAG(column[, offset[, default]])- [ ]необязательная часть
- column
- Столбец или выражение, значение которого берётся из предыдущей строки
- offset
- На сколько строк назад смотреть, неотрицательное целое число, по умолчанию 1INTНеобязательный
- default
- Значение, если строки со смещением нет, по умолчанию NULLНеобязательный
Возвращаемое значение
Значение того же типа, что и column; default или NULL, если строки со смещением нет, например у первой строки раздела
Примеры
Сдвиг на одну и две строки назад
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;Дни с прошлого платежа каждого члена семьи
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;Подробности
Типичная задача — сравнить строку с предыдущей: разница x - LAG(x) OVER (...) или DATEDIFF(date, LAG(date) OVER (...)) показывает изменение с прошлой строки. default подставляется, только когда строки со смещением нет; если она есть, но в ней NULL, вернётся NULL.