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

Senior SQL Fintech

Условие задания

**Контекст:** Задание по мотивам реального тестового в Альфа-Банке. Аналитик CRM строит историю изменения сегмента клиента: нужно найти дату начала и окончания каждого непрерывного периода пребывания в одном сегменте.

**Данные:**

[см. код в задании]

| date | client_id | segment_id |
|------------|-----------|------------|
| 2025-01-01 | 1 | 10 |
| 2025-01-02 | 1 | 10 |
| 2025-01-03 | 1 | 10 |
| 2025-01-04 | 1 | 20 |
| 2025-01-05 | 1 | 20 |
| 2025-01-06 | 1 | 10 |
| 2025-01-07 | 1 | 10 |
| 2025-01-08 | 1 | 30 |
| 2025-01-01 | 2 | 20 |
| ... | ... | ... |

**Задание:**

1. Определите непрерывные периоды нахождения клиента в одном сегменте
2. Если клиент был в сегменте 10, затем перешёл в 20, затем вернулся в 10 — это два отдельных периода в сегменте 10
3. Выведите client_id, segment_id, period_start, period_end

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

Структура для ориентира — реальные значения из эталонного решения.

CREATE TABLE segment (
    date DATE NOT NULL,
    client_id INT NOT NULL,
    segment_id INT NOT NULL,
    PRIMARY KEY (date, client_id)
);

INSERT INTO segment (date, client_id, segment_id) VALUES
('2025-01-01', 1, 10),
('2025-01-02', 1, 10),
('2025-01-03', 1, 10),
('2025-01-04', 1, 20),
('2025-01-05', 1, 20),
('2025-01-06', 1, 10),
('2025-01-07', 1, 10),
('2025-01-08', 1, 30),
('2025-01-01', 2, 20),
('2025-01-02', 2, 20),
('2025-01-03', 2, 30),
('2025-01-04', 2, 30),
('2025-01-05', 2, 30),
('2025-01-06', 2, 20);

Темы

LAG SUM OVER islands-and-gaps группировка интервалов

Подсказки

Все тестовые задания →

Частые вопросы

Какой уровень знаний нужен для задачи "Периоды действия сегмента клиента"?

Это задание для уровня Senior. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.

На каких собеседованиях встречается такая задача?

Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: LAG, SUM OVER, islands-and-gaps, группировка интервалов.

Сколько времени даётся на решение?

На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

Где ещё потренироваться по теме «SQL»?

На zasqlpython.ru есть 425 SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.

← Все задания