Для каждой покупки пользователя нужно добавить дату следующей покупки этого же пользователя, чтобы потом посчитать интервал между покупками. Что использовать?

ALAG(order_at) OVER (PARTITION BY user_id ORDER BY order_at)
BLEAD(order_at) OVER (ORDER BY order_at)
CRANK() OVER (PARTITION BY user_id ORDER BY order_at)
DLEAD(order_at) OVER (PARTITION BY user_id ORDER BY order_at)
Правильный ответ. LEAD возвращает значение из следующей строки относительно текущей по порядку ORDER BY внутри окна.

Разбор

Окно OVER (PARTITION BY user_id ORDER BY order_at) выстраивает покупки каждого пользователя в хронологическом порядке. LEAD(order_at) берёт order_at из следующей строки этого окна, что и даёт дату следующей покупки пользователя. LAG смотрит назад и вернёт предыдущую покупку, RANK возвращает номер строки, а без PARTITION BY user_id следующая строка может оказаться покупкой совсем другого пользователя.

Проверь себя · 1/3разбор после ответа
Вы делаете рейтинг товаров по выручке внутри категории. Если два товара делят 2 место, следующий товар должен получить 3 место (без пропуска). Какая функция подходит лучше всего?
Тренировать SQL в Telegram

Ещё вопросы по теме «Оконные функции»