LEAD
Возвращает значение из строки, которая стоит на offset строк позже текущей в разделе окна.
MySQL 8.1
LEAD(column[, offset[, default]]) OVER ([PARTITION BY ...] [ORDER BY ...])Параметры
- column
- Столбец или выражение, значение которого берётся из следующей строки
- offsetINTнеобязательный
- На сколько строк вперёд смотреть, неотрицательное целое число, по умолчанию 1
- defaultнеобязательный
- Значение, если строки со смещением нет, по умолчанию NULL
- PARTITION BYнеобязательный
- Столбцы, по которым строки делятся на разделы, смещение не выходит за границы раздела
- ORDER BYнеобязательный
- Порядок строк, определяющий, какая строка следующая; без него порядок не определён
Возвращаемое значение
Значение того же типа, что и column; default или NULL, если строки со смещением нет, например у последней строки раздела
Примеры
Сдвиг на одну и две строки вперёд
MySQL 8.1
SELECT member_name,
birthday,
LEAD(member_name) OVER (
ORDER BY birthday
) AS next_member,
LEAD(member_name, 2, 'none') OVER (
ORDER BY birthday
) AS two_rows_ahead
FROM FamilyMembers;Свободные дни до следующей брони
MySQL 8.1
SELECT room_id,
start_date,
end_date,
DATEDIFF(
LEAD(start_date) OVER (
PARTITION BY room_id
ORDER BY start_date
),
end_date
) AS free_days_after
FROM Reservations;Подробности
LEAD удобна, чтобы посчитать промежуток до следующего события: например, сколько дней комната свободна до следующего бронирования. default подставляется, только когда строки со смещением нет; если она есть, но в ней NULL, вернётся NULL.