Нужно посчитать DAU за последние 30 дней. Какой запрос корректнее для большой таблицы events с миллиардом строк?
SQLmediummiddle
Варианты ответа
SELECT date, COUNT(DISTINCT user_id) FROM events WHERE date >= CURRENT_DATE - INTERVAL '30 day' GROUP BY date — фильтр по партиционной колонке
SELECT date, COUNT(DISTINCT user_id) FROM events GROUP BY date HAVING date >= CURRENT_DATE - INTERVAL '30 day' — HAVING после агрегации фильтрует уже посчитанные группы
WITH last30 AS (SELECT * FROM events) SELECT date, COUNT(DISTINCT user_id) FROM last30 WHERE date >= CURRENT_DATE - INTERVAL '30 day' GROUP BY date
SELECT date, COUNT(DISTINCT user_id) FROM events WHERE date IN (SELECT generate_series(CURRENT_DATE - 30, CURRENT_DATE, '1 day')) GROUP BY date
Разбор ответа
Подробный разбор с объяснением «почему правильный ответ верный» и почему остальные неверны — после регистрации.
2475 вопросов с разбором, quiz-режим с проверкой, AI-собес и подготовка к интервью аналитика.