**Контекст:** Реальная задача из собеса в продуктовую команду. Есть поток событий юзеров, но нет явного `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
Это задание для уровня Senior. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: sessionization, window-functions, LAG, event-stream.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 520+ SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.
← Все задания