Как сгруппировать заказы из таблицы orders(created_at) по кварталам с помощью DATE_TRUNC?

ASELECT DATE_TRUNC('quarter', created_at) AS q, COUNT(*) FROM orders GROUP BY DATE_TRUNC('quarter', created_at);
BSELECT DATE_TRUNC('month', created_at) AS q, COUNT(*) FROM orders GROUP BY DATE_TRUNC('month', created_at);
CSELECT created_at + INTERVAL '3 months' AS q, COUNT(*) FROM orders GROUP BY created_at + INTERVAL '3 months';
DSELECT EXTRACT(QUARTER FROM created_at) AS q, COUNT(*) FROM orders GROUP BY EXTRACT(QUARTER FROM created_at);
Правильный ответ. DATE_TRUNC('quarter', ...) возвращает начало квартала и подходит для квартальных бакетов.

Разбор

Для квартальной агрегации удобнее использовать DATE_TRUNC('quarter', created_at), потому что результат — конкретная дата/время начала квартала (например, 1 января или 1 апреля). Это лучше для последующих JOIN и сортировок, чем просто номер квартала без года.

Проверь себя · 1/3разбор после ответа
В таблице events(created_at) нужно выбрать события за последние 7 дней с точностью до текущего момента (включая сегодняшние, ещё не завершённые сутки). Какое условие в WHERE корректнее?
Тренировать SQL в Telegram

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