Таблица events(user_id, event_time TEXT в формате "YYYY-MM-DD HH:MM:SS"). Группируйте события в сессии: новая сессия начинается если gap > 30 минут от предыдущего события того же юзера. Выведите user_id, session_id (1, 2, 3...), session_start, session_end, events_count. Сортировка по user_id, session_start.
CREATE TABLE events (id INTEGER PRIMARY KEY, user_id INTEGER, event_time TEXT);
sessionization LAG window JULIANDAY running sum