Sessionization: разбить event stream на сессии (30-min inactivity gap)

Senior SQL product

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

**Контекст:** Реальная задача из собеса в продуктовую команду. Есть поток событий юзеров, но нет явного `session_id` — нужно вычислить его из последовательности событий.

**Правило сессии:** события одного юзера принадлежат одной сессии, если между ними **не прошло больше 30 минут**. Первое событие после 30+ мин простоя — новая сессия.

**Данные:**

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

Пример данных user_id=1:

| event_id | ts | event_type |
|---|---|---|
| 1 | 2026-04-01 10:00 | page_view |
| 2 | 2026-04-01 10:15 | click |
| 3 | 2026-04-01 10:40 | click | ← 25 мин после #2, та же сессия |
| 4 | 2026-04-01 11:30 | click | ← 50 мин после #3, НОВАЯ сессия |
| 5 | 2026-04-01 11:45 | purchase |

**Задание:** присвоить каждому событию `session_id` (глобально уникальный в рамках user_id + session_num).

**Ожидаемый результат:**
- 1, 2, 3 → session_num = 1 у user_id=1
- 4, 5 → session_num = 2 у user_id=1

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

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

CREATE TABLE events (
  event_id    BIGINT PRIMARY KEY,
  user_id     BIGINT NOT NULL,
  event_type  VARCHAR(32),
  ts          TIMESTAMP NOT NULL
);

Темы

sessionization window-functions LAG event-stream

Подсказки

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

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

Какой уровень знаний нужен для задачи "Sessionization: разбить event stream на сессии (30-min inactivity gap)"?

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

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

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

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

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

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

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

← Все задания