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

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 следующая строка может оказаться покупкой совсем другого пользователя.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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