Короткий ответ
Нужен GROUP BY по категории с фильтром по диапазону дат последнего полного месяца; пример приведён для PostgreSQL с date_trunc.
Как это работает подробнее
Запрос агрегирует суммы по категории, а условие WHERE отсекает только полностью завершённый предыдущий календарный месяц.
Пример кода
query.sql
SELECT
COALESCE(category, 'Unknown') AS category,
SUM(amount) AS revenue
FROM orders
WHERE order_date >= date_trunc('month', CURRENT_DATE) - interval '1 month'
AND order_date < date_trunc('month', CURRENT_DATE)
GROUP BY COALESCE(category, 'Unknown')
ORDER BY revenue DESC;Что использовать на практике
- Рекомендация. Определяйте границы месяца динамически относительно текущей даты, учитывайте часовой пояс временных меток заказов и обрабатывайте NULL в категории отдельным значением.
Подводные камни
- Риск. Случайное включение текущего неполного месяца в выборку.
- Риск. Игнорирование NULL-категорий (пропавший столбец на графике).
- Риск. Задвоение сумм из-за JOIN с «размножающей» таблицей.