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

209. Две роуминговые опции подключены одновременно

Средняя

В options — периоды подключения опций. Опция действует с started_at включительно до ended_at не включительно; ended_at пустой, если опция ещё подключена.

Опции ROAM_UNLIM и ROAM_DAY взаимоисключающие, но из-за сбоя у части абонентов их списывали одновременно. Для каждой пары периодов одного абонента, где ROAM_UNLIM и ROAM_DAY действовали одновременно хотя бы секунду, верните subscriber_id и overlap_from — момент, с которого обе опции действуют. Если одна опция закончилась ровно в момент подключения другой, это не пересечение. Порядок — по subscriber_id, затем overlap_from.

В работе: Разбор жалоб на двойное списание в роуминге: кому и с какого момента вернуть деньги.

Таблицы

options — одна строка — один период подключения опции

КолонкаТипЧто значит
period_idintключ
subscriber_idintабонент
option_codetextROAM_UNLIM / ROAM_DAY / …
started_attimestampподключение
ended_attimestampотключение, NULL — подключена

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

options · 6 строк

period_idsubscriber_idoption_codestarted_atended_at
1501ROAM_UNLIM2026-07-01T08:00:002026-07-10T08:00:00
2501ROAM_DAY2026-07-09T12:00:002026-07-12T12:00:00
3502ROAM_UNLIM2026-07-03T00:00:002026-07-05T00:00:00
4502ROAM_DAY2026-07-06T00:00:002026-07-07T00:00:00
5503ROAM_DAY2026-07-02T10:00:002026-07-04T10:00:00
6503ROAM_UNLIM2026-07-01T10:00:00NULL

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

subscriber_idoverlap_from
5012026-07-09T12:00:00
5032026-07-02T10:00:00
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
subscriber_id, overlap_from
JOINдатыNULL

Источник: наша задача на данных МТС: подключения роуминговых опций. Условие пересказано своими словами.