Функция LEAD() в SQL: синтаксис, примеры «заглянуть вперёд»

LEAD() — оконная функция, которая возвращает значение из следующей строки в пределах окна (ORDER BY). Аналитик применяет её, чтобы «заглянуть вперёд»: сколько времени до следующего действия пользователя, какой будет следующий статус заказа, разница со следующим периодом. Это зеркальная функция к LAG().

Синтаксис

LEAD(колонка, смещение, значение_по_умолчанию) OVER (PARTITION BY … ORDER BY …)

Примеры использования

Пример 1: Время до следующего события пользователя

SELECT user_id, event_ts,
       LEAD(event_ts) OVER (PARTITION BY user_id ORDER BY event_ts) - event_ts AS time_to_next
FROM events;

Результат:

user_id | event_ts          | time_to_next
1       | 2026-01-01 10:00  | 00:05:00
1       | 2026-01-01 10:05  | NULL

Пример 2: Следующий статус заказа

SELECT order_id, status, changed_at,
       LEAD(status) OVER (PARTITION BY order_id ORDER BY changed_at) AS next_status
FROM order_status_log;

Результат:

order_id | status  | next_status
10       | created | paid
10       | paid    | shipped
Порешать SQL-задачи в тренажёре →

Типичная ошибка

У последней строки окна LEAD вернёт NULL (следующей строки нет). Это удобно для «открытых» интервалов, но при вычислении длительности учитывай, что последнее событие останется без time_to_next. Как и LAG, LEAD нельзя фильтровать в WHERE — только через подзапрос/CTE.

Где спрашивают на собеседовании

LEAD спрашивают в задачах на сессионизацию и воронки: «сколько времени между шагами», «какой следующий экран». На собеседовании покажи связку LEAD + разность времени и понимание, почему последняя строка NULL.

FAQ: частые вопросы про LEAD

Когда использовать LEAD вместо LAG?

LEAD — когда нужно значение из будущего относительно текущей строки (следующий шаг, следующий период). LAG — из прошлого. Часто их берут вместе, чтобы получить и предыдущее, и следующее значение.

Как посчитать длительность сессии через LEAD?

Возьми LEAD(event_ts) по пользователю с ORDER BY по времени и вычти текущий event_ts — получишь интервал до следующего события; сумма таких интервалов внутри сессии даёт её длительность.

Что вернёт LEAD в последней строке?

NULL, так как следующей строки в окне нет. Можно подставить значение по умолчанию третьим аргументом: LEAD(x, 1, x).

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

Оконные функции · Сессионизация

Другие функции SQL

ROW_NUMBER · RANK · DENSE_RANK · LAG · NTILE · SUM OVER

Открыть SQL-тренажёр (565 задач) →