В таблице events(user_id, created_at) поле created_at имеет тип отметки времени с долями секунд. Как корректно посчитать количество событий по дням?

ASELECT created_at, COUNT(*) FROM events GROUP BY created_at: группировка по точной метке времени
BSELECT DATE_TRUNC('day', created_at) AS day, COUNT(*) FROM events GROUP BY DATE_TRUNC('day', created_at)
CSELECT DATE_TRUNC('day', created_at) AS day, COUNT(*) FROM events: запрос без GROUP BY по выражению дня
DSELECT DATE_TRUNC('month', created_at) AS day, COUNT(*) FROM events GROUP BY DATE_TRUNC('month', created_at)
Правильный ответ. DATE_TRUNC('day', ...) обрезает время до начала дня и подходит для группировки по дням.

Разбор

Для бакетирования по дням используйте DATE_TRUNC('day', created_at) и группируйте по этому же выражению. Группировка по самому created_at даст отдельную группу на каждую уникальную метку времени. Без GROUP BY по выражению дня запрос вернёт ошибку или сложит все события в одну строку. Группировка по месяцу — это уже другое разрешение, не дни.

Проверь себя · 1/3разбор после ответа
Колонка created_at типа timestamp. Какое утверждение про created_at::date и DATE_TRUNC('day', created_at) верно?
Тренировать SQL в Telegram

Ещё вопросы по теме «Даты и время»