Войти Регистрация
Data base

217. Простой банкоматов без двойного счёта

Сложная

Простой банкомата фиксируют две системы: мониторинг купюроприёмника и мониторинг связи. Каждая пишет свои инциденты в atm_outages, поэтому интервалы одного банкомата могут перекрываться или лежать один внутри другого. Инцидент длится с started_at до ended_at.

Посчитайте для каждого банкомата, сколько минут в октябре 2026 года он был недоступен хотя бы по одной причине: время, когда открыты два инцидента сразу, учитывается один раз. Инциденты, начавшиеся в сентябре или закончившиеся в ноябре, обрежьте по границам октября. Верните atm_id, downtime_min (целое), только банкоматы с простоем в октябре. Порядок — по atm_id.

В работе: SLA с инкассаторской службой: штраф считается по реальному времени простоя, а не по числу инцидентов.

Таблицы

atm_outages — одна строка — один инцидент из любой системы

КолонкаТипЧто значит
outage_idintключ
atm_idintбанкомат
sourcetextcash / network
started_attimestampначало
ended_attimestampконец

Пример: данные

atm_outages · 4 строки

outage_idatm_idsourcestarted_atended_at
13001cash2026-10-05T10:00:002026-10-05T12:00:00
23001network2026-10-05T11:30:002026-10-05T13:00:00
33001network2026-10-07T09:00:002026-10-07T09:45:00
43002cash2026-10-10T14:00:002026-10-10T14:20:00

Ожидаемый ответ

atm_iddowntime_min
3001225
300220
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
atm_id, downtime_min
пропуски и островаоконные функцииCTEдаты

Источник: наша задача на данных Сбера: инциденты мониторинга банкоматов. Условие пересказано своими словами.