SQLLab
Теория· 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'

Прочитайте урок до конца — прогресс засчитается автоматически