**Контекст:** Банк ежемесячно присваивает клиентам сегменты (VIP, Standard, Inactive). Для аналитики нужно определить непрерывные периоды, когда клиент находился в одном сегменте.
**Данные:**
[см. код в задании]
Пример: клиент 1 был Standard в янв-мар, VIP в апр-июн, снова Standard в июл — это 3 периода.
**Задание:**
1. Для каждого клиента определите непрерывные периоды в каждом сегменте
2. Выведите client_id, segment, дату начала и конца периода, количество месяцев
3. Отсортируйте по client_id и дате начала
Структура для ориентира — реальные значения из эталонного решения.
CREATE TABLE client_segments (
id SERIAL PRIMARY KEY,
client_id INT NOT NULL,
segment VARCHAR(50) NOT NULL, -- 'VIP', 'Standard', 'Inactive'
month_date DATE NOT NULL, -- первое число месяца
UNIQUE (client_id, month_date)
);
Gaps and Islands оконные функции ROW_NUMBER периоды
Это задание для уровня Senior. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: Gaps and Islands, оконные функции, ROW_NUMBER, периоды.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 425 SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.
← Все задания