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

5. Периоды клиента в сегменте

Сложная

Каждый месяц банк сохраняет срез: в каком сегменте клиент (segments.snap_month — первое число месяца). Соберите для каждого клиента периоды — подряд идущие месяцы в одном сегменте.

Если клиент ушёл в другой сегмент и вернулся, это новый период. Если среза за месяц нет (клиент выпадал из базы), период тоже прерывается.

Верните client_id, segment, start_month, end_month; порядок — по client_id, затем start_month.

В работе: История сегментов для оценки, сколько клиенты живут в «Премиуме» до понижения.

Таблицы

segments — месячный срез; один клиент — одна строка в месяц

КолонкаТипЧто значит
snap_monthdateмесяц среза, 1-е число
client_idintклиент
segmenttextМассовый, Премиум, Частный банк

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

segments · 7 строк

snap_monthclient_idsegment
2025-01-011Массовый
2025-02-011Массовый
2025-03-011Массовый
2025-04-011Премиум
2025-05-011Премиум
2025-01-012Премиум
2025-02-012Премиум

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

client_idsegmentstart_monthend_month
1Массовый2025-01-012025-03-01
1Премиум2025-04-012025-05-01
2Премиум2025-01-012025-02-01
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
client_id, segment, start_month, end_month
пропуски и островаоконные функцииCTEдаты

Источник: тестовое продуктового аналитика Альфа-Банка, сборник No Data No Growth. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.