В таблице метрик есть dt, platform, dau. Нужно вывести значение dau за предыдущий день для той же платформы, чтобы посчитать дневное изменение. Какое выражение верное?
A
LEAD(dau) OVER (PARTITION BY platform ORDER BY dt)B
LAG(dau) OVER (PARTITION BY platform)C
LAG(dau) OVER (ORDER BY dt)D
LAG(dau) OVER (PARTITION BY platform ORDER BY dt)Правильный ответ.
LAG берет предыдущее значение по ORDER BY внутри каждой PARTITION BY.Разбор
Чтобы получить «вчерашний dau», нужно определить порядок по времени через ORDER BY dt. Чтобы сравнение шло внутри одной платформы, нужен PARTITION BY platform. Поэтому корректно: LAG(dau) OVER (PARTITION BY platform ORDER BY dt). Без ORDER BY понятие «предыдущий день» не определено, а без PARTITION BY вы будете сравнивать разные платформы между собой.
Проверь себя · 1/3разбор после ответа
Вы хотите сравнить текущую метрику с метрикой следующего периода во временном ряду. Какая функция возвращает «следующее» значение относительно текущей строки по порядку
ORDER BY?Ещё вопросы по теме «Оконные функции»
- В одной категории 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-й заказ. Какое выражение подходит?
- Все вопросы по «Оконные функции» →