SELECT date_trunc('month', created_at)::date AS month,
SUM(amount) AS revenue
FROM orders
GROUP BY 1
ORDER BY 1;
Результат:
month | revenue 2026-01-01 | 45000 2026-02-01 | 52000
SELECT date_trunc('day', event_ts)::date AS day,
COUNT(DISTINCT user_id) AS dau
FROM events
GROUP BY 1;
Результат:
day | dau 2026-03-01 | 1240 2026-03-02 | 1310Порешать SQL-задачи в тренажёре →
Группировка временных рядов через date_trunc — база продуктовой аналитики и почти любого дашборда. На собеседовании спрашивают «выручка по месяцам с приростом» — это date_trunc + GROUP BY + LAG.
date_trunc обрезает дату до начала периода и возвращает timestamp (например, начало месяца) — удобно для группировки. EXTRACT достаёт одно числовое поле (год, месяц, день недели) — удобно для фильтров и признаков.
Используй strftime: strftime('%Y-%m', created_at) вернёт строку «2026-01», по которой и группируй. Это ближайший аналог date_trunc('month').
В PostgreSQL date_trunc('week', …) считает неделю по ISO — с понедельника. Если нужна неделя с воскресенья, сдвигай дату на день перед усечением.
Работа с датами · Анализ выручки
LAG · EXTRACT · strftime · TO_CHAR · AGE · CURRENT_DATE
Открыть SQL-тренажёр (565 задач) →