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

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

Проверь себя · 1/3разбор после ответа
Вы хотите сравнить текущую метрику с метрикой следующего периода во временном ряду. Какая функция возвращает «следующее» значение относительно текущей строки по порядку ORDER BY?
Тренировать SQL в Telegram

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