Сессионизация в SQL: разделение событий на сессии

14 задач Лёгкие, средние, сложные С эталонными решениями Решение в браузере
Сессионизация — выделить «сессии» из непрерывного потока событий по правилу «пауза больше порога = новая сессия». Это классика продуктовой аналитики: на собесе просят «разбей клики юзера на сессии при паузе 30 минут», «посчитай длительность и число событий каждой сессии». Техника одна и та же: LAG берёт время предыдущего события, при большом разрыве ставится флаг новой сессии, накопительный SUM по окну превращает флаги в session_id, дальше GROUP BY по session_id для метрик. Разбираем сессионизацию через окна шаг за шагом.
Начать решать задачи →

Все задачи на «Сессионизация» (14)

FAQ: частые вопросы про сессионизация

Как разделить события на сессии в SQL?

LAG(event_time) OVER (PARTITION BY user_id ORDER BY event_time) даёт время предыдущего события. Если разница больше порога (например 30 минут) — флаг new_session = 1. SUM(new_session) OVER (PARTITION BY user_id ORDER BY event_time) даёт сквозной session_id.

Какой порог паузы выбрать для сессии?

Индустриальный стандарт веб-аналитики — 30 минут неактивности (так считает Google Analytics). Но порог зависит от продукта: для мессенджера короче, для видеосервиса длиннее. На собесе уточнить порог у интервьюера — это плюс.

Как посчитать длительность и число событий в сессии?

После присвоения session_id: GROUP BY user_id, session_id, затем MAX(event_time) минус MIN(event_time) как длительность и COUNT(*) как число событий. Сессии в одно событие (bounce) имеют нулевую длительность.

Связанные темы SQL

Агрегации · JOIN-запросы · Оконные функции · CTE (Common Table Expressions) · Подзапросы · Работа с датами · Строковые функции · Условная логика

Открыть весь SQL-тренажёр (576 задач) →