Сессионизация кликстрима по разрыву 30 минут

Сложная Сессионизация Yandex

Условие задачи

В таблице pageviews — просмотры страниц пользователей с меткой времени event_time ('YYYY-MM-DD HH:MM:SS'). Нужно разбить активность каждого пользователя на сессии по правилу: если между соседними (по времени) событиями пользователя прошло СТРОГО БОЛЬШЕ 30 минут — начинается новая сессия. Первое событие пользователя всегда открывает сессию. Верните число сессий на пользователя: колонки user_id и session_count, отсортированные по user_id. Используйте оконные функции (LAG для предыдущего события, кумулятивную сумму флагов новой сессии).

Схема данных

CREATE TABLE pageviews (
  user_id    INTEGER,
  event_time TEXT   -- метка времени 'YYYY-MM-DD HH:MM:SS'
);

Темы

sessionization lag window-functions julianday cumulative-sum gap-and-island

Подсказки

Что проверяет эта задача

Задача «Сессионизация кликстрима по разрыву 30 минут» учит решать задачи по теме «Сессионизация» так, как это спрашивают на собеседовании аналитика данных. Такие задачи встречаются на собеседованиях в Yandex и других IT-компаниях. Уровень сложный — задача проверяет глубину и умение собрать запрос из нескольких приёмов.

Как подступиться к решению

Сначала разберись со схемой данных и пойми, какой результат нужен на выходе. Определи, какие таблицы и поля задействованы, и собирай запрос пошагово: фильтрация → соединение или группировка → итоговый отбор и сортировка. Проверь результат на крайних случаях — NULL, дубликаты, пустые группы. Свой запрос сразу прогоняешь автопроверкой в интерактивной SQL-песочнице на реальной базе (SQLite и PostgreSQL 16 прямо в браузере).

Хочешь разобрать SQL системно с нуля — пройди бесплатный курс «SQL с нуля» и закрепи навык в тренажёре.

Решить в интерактивной SQL-песочнице → ← Все SQL-задачи