SQLДаты и NULLMediumБесплатно

Дни без заказов за последние 6 месяцев

// Условие

Найдите все даты за период с 2024-07-01 по 2024-12-31, когда не было ни одного заказа (любого статуса). Выведите gap_date. Отсортируйте по дате.

// Таблицы

sandbox.orders
order_idINT
user_idINT
order_dateTIMESTAMP
amountNUMERIC(10,2)
statusVARCHAR(20)
delivery_daysINT
promo_codeVARCHAR(20)

// Что тренирует

generate_seriesLEFT JOINGap analysisДаты
▶ Решить в SQL-песочнице

// Решение

Подсказка

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 элегантнее.

// Похожие задачи