SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках

Практическая задача по SQL на тему «Календарная таблица и пропущенные даты». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.

Непрерывный отчёт о звонках

Что уже дано

Таблицы calendar(cal_date TEXT PRIMARY KEY) и support_calls(call_id INTEGER PRIMARY KEY, initiated_at TEXT NOT NULL, duration_sec INTEGER NOT NULL). Календарь содержит все семь дат 2024-04-01…2024-04-07 ровно по одному разу и может содержать другие даты. Формат дат YYYY-MM-DD. Время звонков UTC YYYY-MM-DD HH:MM:SS, годы 2023–2025; call_id положительный, duration_sec от 0 до 100000. До 500 строк в каждой таблице.

Что нужно сделать

Постройте ежедневный отчёт за 1–7 апреля 2024 включительно: число звонков и их средняя длительность без округления. Дни без звонков должны иметь calls_count = 0 и avg_duration_sec = NULL. В каждом дне ровно одна строка.

Ввод и вывод

Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 3 столбцов в указанном порядке и с этими именами: cal_date, calls_count, avg_duration_sec. cal_date — TEXT; calls_count — INTEGER; avg_duration_sec — REAL либо NULL. Сортировка: cal_date ASC. В результате всегда семь строк, в том числе при пустой support_calls. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.

Пример

Подготовка данных
INSERT INTO calendar VALUES ('2024-04-01'),('2024-04-02'),('2024-04-03'),('2024-04-04'),('2024-04-05'),('2024-04-06'),('2024-04-07'),('2023-12-31'),('2025-01-01');
INSERT INTO support_calls VALUES (1,'2024-04-01 09:00:00',120),(2,'2024-04-01 18:00:00',240),(3,'2024-04-04 10:00:00',0);
Вывод
2024-04-01|2|180.0
2024-04-02|0|
2024-04-03|0|
2024-04-04|1|0.0
2024-04-05|0|
2024-04-06|0|
2024-04-07|0|
РешениеSQL · SQLite

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи