В недельной витрине метрик вы хотите вывести значение выручки из строки «две недели назад» отдельно для каждого продукта. Какой вызов оконной функции корректен?
A
LAG(revenue) OVER (PARTITION BY product_id ORDER BY week)B
LEAD(revenue, 2) OVER (PARTITION BY product_id ORDER BY week)C
LAG(revenue, 2) OVER (PARTITION BY product_id ORDER BY week)D
FIRST_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), чтобы получить «вчерашнюю цену» товара по дням. Почему результат может оказаться неожиданным?Ещё вопросы по теме «Оконные функции»
- В одной категории 4 товара с выручкой 100, 100, 90 и 80. Вычисляем `RANK() OVER (ORDER BY revenue DESC)`. Какие ранги получат строки при сортировке по убыванию выручки?
- Вы ищете последнюю транзакцию пользователя, используя `ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY paid_at DESC)` и оставляя `row_number = 1`. Что верно, если у пользователя две транзакции с одинаковым `paid_at`?
- Вы делаете рейтинг товаров по выручке внутри категории. Если два товара делят 2 место, следующий товар должен получить 3 место (без пропуска). Какая функция подходит лучше всего?
- В каждой категории нужно выбрать товары с тремя наибольшими различными значениями выручки (`revenue`), включая все товары, которые делят эти значения при равенстве. Какой вариант даст нужный результат?
- Нужно пронумеровать заказы каждого пользователя по времени покупки, начиная с 1, чтобы найти его 1-й, 2-й, 3-й заказ. Какое выражение подходит?
- Все вопросы по «Оконные функции» →