В недельной витрине метрик вы хотите вывести значение выручки из строки «две недели назад» отдельно для каждого продукта. Какой вызов оконной функции корректен?

ALAG(revenue) OVER (PARTITION BY product_id ORDER BY week)
BLEAD(revenue, 2) OVER (PARTITION BY product_id ORDER BY week)
CLAG(revenue, 2) OVER (PARTITION BY product_id ORDER BY week)
DFIRST_VALUE(revenue) OVER (PARTITION BY product_id ORDER BY week)
Правильный ответ. Второй аргумент LAG(x, n) задаёт смещение на n строк назад внутри секции окна.

Разбор

Вызов LAG(revenue, 2) OVER (PARTITION BY product_id ORDER BY week) возвращает значение выручки из строки, которая находится на две позиции раньше в порядке week внутри секции product_id. Это удобно для сравнений с лагом 2 (например, текущая неделя против двух недель назад), когда сдвиг на одну неделю недостаточно информативен. Вариант LEAD смотрит вперёд, LAG без второго аргумента — на одну строку назад, а FIRST_VALUE всегда отдаёт первую строку секции.

Проверь себя · 1/3разбор после ответа
Вы пишете LAG(price) OVER (PARTITION BY product_id), чтобы получить «вчерашнюю цену» товара по дням. Почему результат может оказаться неожиданным?
Тренировать SQL в Telegram

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