В таблице с месячной выручкой (по одному ряду на пользователя и месяц) нужно посчитать изменение относительно прошлого месяца: текущая revenue минус прошлый revenue. Какое выражение корректно?

Arevenue - LEAD(revenue) OVER (PARTITION BY user_id ORDER BY month)
Brevenue - LAG(revenue) OVER (PARTITION BY user_id)
Crevenue - LAG(revenue) OVER (PARTITION BY user_id ORDER BY month)
Drevenue - SUM(revenue) OVER (PARTITION BY user_id ORDER BY month)
Правильный ответ. Для сравнения «текущий период минус прошлый» нужна LAG с ORDER BY по времени.

Разбор

LAG(revenue) OVER (PARTITION BY user_id ORDER BY month) возвращает значение revenue из предыдущего месяца для того же user_id. Тогда разница revenue - LAG(revenue) ... дает period-over-period изменение. Без ORDER BY month «предыдущий месяц» не определен. С LEAD вы сравните текущий месяц со следующим, то есть получите «сдвиг вперед».

Проверь себя · 1/3разбор после ответа
Для каждой покупки пользователя нужно добавить дату следующей покупки этого же пользователя (чтобы потом посчитать интервал между покупками). Что использовать?
Тренировать SQL в Telegram

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