Каждый месяц банк сохраняет срез: в каком сегменте клиент (segments.snap_month — первое число месяца). Соберите для каждого клиента периоды — подряд идущие месяцы в одном сегменте.
Если клиент ушёл в другой сегмент и вернулся, это новый период. Если среза за месяц нет (клиент выпадал из базы), период тоже прерывается.
Верните client_id, segment, start_month, end_month; порядок — по client_id, затем start_month.
В работе: История сегментов для оценки, сколько клиенты живут в «Премиуме» до понижения.
Таблицы
segments — месячный срез; один клиент — одна строка в месяц
| Колонка | Тип | Что значит |
|---|---|---|
snap_month | date | месяц среза, 1-е число |
client_id | int | клиент |
segment | text | Массовый, Премиум, Частный банк |
Пример: данные
segments · 7 строк
| snap_month | client_id | segment |
|---|---|---|
| 2025-01-01 | 1 | Массовый |
| 2025-02-01 | 1 | Массовый |
| 2025-03-01 | 1 | Массовый |
| 2025-04-01 | 1 | Премиум |
| 2025-05-01 | 1 | Премиум |
| 2025-01-01 | 2 | Премиум |
| 2025-02-01 | 2 | Премиум |
Ожидаемый ответ
| client_id | segment | start_month | end_month |
|---|---|---|---|
| 1 | Массовый | 2025-01-01 | 2025-03-01 |
| 1 | Премиум | 2025-04-01 | 2025-05-01 |
| 2 | Премиум | 2025-01-01 | 2025-02-01 |
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
client_id, segment, start_month, end_month
Источник: тестовое продуктового аналитика Альфа-Банка, сборник No Data No Growth. Условие пересказано своими словами.
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.