Теория· 8 мин· 10 XP
DATE_TRUNC и EXTRACT: группировка по периодам
Для BI-отчётов нужно агрегировать данные по периодам: неделям, месяцам, кварталам, годам.
DATE_TRUNC — «обрезать» дату до нужной точности
sql
DATE_TRUNC('month', '2024-03-15') → 2024-03-01
DATE_TRUNC('quarter','2024-03-15') → 2024-01-01
DATE_TRUNC('year', '2024-03-15') → 2024-01-01
DATE_TRUNC('week', '2024-03-15') → 2024-03-11 -- понедельник
Используйте в GROUP BY:
sql
SELECT
DATE_TRUNC('month', sale_date) AS month,
SUM(amount) AS total
FROM sales
GROUP BY month
ORDER BY month;
EXTRACT / DATE_PART — извлечь число
sql
EXTRACT(YEAR FROM sale_date) -- 2024
EXTRACT(MONTH FROM sale_date) -- 3
EXTRACT(DOW FROM sale_date) -- 0=вс, 1=пн, ..., 6=сб
EXTRACT(QUARTER FROM sale_date) -- 1,2,3,4
-- DATE_PART — синоним EXTRACT:
DATE_PART('month', sale_date) -- 3
Отображение периода как текст
sql
TO_CHAR(sale_date, 'YYYY-MM') -- '2024-03'
TO_CHAR(sale_date, 'Q YYYY') -- '1 2024' (квартал)
TO_CHAR(sale_date, 'Mon YYYY') -- 'Mar 2024'
Прочитайте урок до конца — прогресс засчитается автоматически