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