SQL: Подсчёт одновременно активных интервалов — Пиковые окна работ и занятые слоты
Практическая задача по SQL на тему «Подсчёт одновременно активных интервалов». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.
Пиковые окна работ и занятые слоты
Что уже дано
Таблица cluster_jobs(job_id INTEGER PRIMARY KEY, cluster_id INTEGER NOT NULL, start_time TEXT NOT NULL, end_time TEXT NOT NULL, slots INTEGER NOT NULL). До 500 работ; ID положительные, slots от 1 до 10. UTC-время YYYY-MM-DD HH:MM:SS в 2024 году, start_time < end_time. Работа занимает slots ресурсов постоянно внутри полуоткрытого интервала; одинаковые интервалы разных ID учитываются отдельно.
Что нужно сделать
Для каждого кластера найдите все элементарные положительные окна с максимальным числом одновременных работ active_jobs. Границы элементарных окон — все различные начала и концы работ данного кластера. Для каждого пикового окна покажите также occupied_slots — сумму slots активных работ. Пик выбирается по active_jobs, не по occupied_slots. Соседние пиковые окна не объединяйте, даже при одинаковом active_jobs.
Ввод и вывод
Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 5 столбцов в указанном порядке и с этими именами: cluster_id, window_start, window_end, active_jobs, occupied_slots. cluster_id, active_jobs, occupied_slots — INTEGER; границы — TEXT; NULL нет. Сортировка: cluster_id ASC, window_start ASC. Пустая таблица — пустой результат. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.
Пример
- Подготовка данных
INSERT INTO cluster_jobs VALUES (1,1,'2024-06-01 09:00:00','2024-06-01 10:00:00',9),(2,1,'2024-06-01 11:00:00','2024-06-01 12:00:00',1),(3,1,'2024-06-01 11:00:00','2024-06-01 12:00:00',2),(4,2,'2024-06-01 09:00:00','2024-06-01 13:00:00',4);
- Вывод
1|2024-06-01 11:00:00|2024-06-01 12:00:00|2|3 2|2024-06-01 09:00:00|2024-06-01 13:00:00|1|4
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- SQL: Подсчёт одновременно активных интервалов — Максимальное число занятых столов
- SQL: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: SELF JOIN и поиск уникальных пар — Пары с несколькими общими проектами
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Объединение перекрывающихся интервалов — Объединённая занятость внутри отчётного окна
- SQL: EXPLAIN QUERY PLAN в SQLite — Сводка ошибок и их доля по сервисам
