В таблице метрик есть dt, platform, dau. Нужно вывести значение dau за предыдущий день для той же платформы, чтобы посчитать дневное изменение. Какое выражение верное?

ALEAD(dau) OVER (PARTITION BY platform ORDER BY dt)
BLAG(dau) OVER (PARTITION BY platform) без ORDER BY
CLAG(dau) OVER (ORDER BY dt) без PARTITION BY
DLAG(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). Без сортировки понятие «предыдущий день» не определено, без разбиения по платформе вы будете сравнивать разные платформы, а LEAD берёт следующее значение, а не предыдущее.

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

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

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

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

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