В 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_id | int | ключ |
subscriber_id | int | абонент |
option_code | text | ROAM_UNLIM / ROAM_DAY / … |
started_at | timestamp | подключение |
ended_at | timestamp | отключение, NULL — подключена |
Пример: данные
options · 6 строк
| period_id | subscriber_id | option_code | started_at | ended_at |
|---|---|---|---|---|
| 1 | 501 | ROAM_UNLIM | 2026-07-01T08:00:00 | 2026-07-10T08:00:00 |
| 2 | 501 | ROAM_DAY | 2026-07-09T12:00:00 | 2026-07-12T12:00:00 |
| 3 | 502 | ROAM_UNLIM | 2026-07-03T00:00:00 | 2026-07-05T00:00:00 |
| 4 | 502 | ROAM_DAY | 2026-07-06T00:00:00 | 2026-07-07T00:00:00 |
| 5 | 503 | ROAM_DAY | 2026-07-02T10:00:00 | 2026-07-04T10:00:00 |
| 6 | 503 | ROAM_UNLIM | 2026-07-01T10:00:00 | NULL |
Ожидаемый ответ
| subscriber_id | overlap_from |
|---|---|
| 501 | 2026-07-09T12:00:00 |
| 503 | 2026-07-02T10:00:00 |
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
subscriber_id, overlap_from
Источник: наша задача на данных МТС: подключения роуминговых опций. Условие пересказано своими словами.
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.