Когда в базе нет отдельной таблицы календаря, можно сгенерировать последовательность прямо в запросе:
WITH RECURSIVE dates AS (
SELECT CAST('2025-01-01' AS DATE) AS d
UNION ALL
SELECT d + INTERVAL '1 day'
FROM dates WHERE d < '2025-01-07'
)
Так формируется список дней от 1 до 7 января:
SELECT d
FROM dates;
Теперь календарь можно соединить с заказами, чтобы увидеть пропуски:
SELECT d, COALESCE(SUM(o.total),0) AS total
FROM dates d
LEFT JOIN orders o ON o.order_date = d.d
GROUP BY d
ORDER BY d;
🔥 Рекурсивные
CTE позволяют генерировать временные ряды или числа «на лету», без вспомогательных таблиц.➡️ SQL Ready | #практика