Дни без заказов за последние 6 месяцев
// Условие
Найдите все даты за период с 2024-07-01 по 2024-12-31, когда не было ни одного заказа (любого статуса). Выведите gap_date. Отсортируйте по дате.
// Таблицы
sandbox.orders
order_id | INT |
user_id | INT |
order_date | TIMESTAMP |
amount | NUMERIC(10,2) |
status | VARCHAR(20) |
delivery_days | INT |
promo_code | VARCHAR(20) |
// Что тренирует
generate_seriesLEFT JOINGap analysisДаты
// Решение
Подсказка
generate_series('2024-07-01'::date, '2024-12-31'::date, '1 day') создаёт календарь. LEFT JOIN с orders, WHERE order_id IS NULL.
Сначала попробуй сам → Показать решение
SELECT
d.gap_date
FROM generate_series(
'2024-07-01'::date,
'2024-12-31'::date,
'1 day'::interval
) AS d(gap_date)
LEFT JOIN sandbox.orders o
ON d.gap_date = o.order_date::date
WHERE o.order_id IS NULL
ORDER BY d.gap_date;
generate_series — PostgreSQL-функция, генерирующая последовательность дат. Паттерн «календарь LEFT JOIN данные» — канонический способ найти пропуски во временных рядах. Этот паттерн встречается на каждом третьем собесе. Альтернатива: calendar CTE, но generate_series элегантнее.