SQL: Выделение пользовательских сессий — Номер сессии и позиция клика

Практическая задача по SQL на тему «Выделение пользовательских сессий». В условии приведены схема таблиц, ограничения данных, имена столбцов результата и порядок сортировки. Напишите один SELECT или WITH-запрос для SQLite. Перед проверкой продумайте пустой результат, повторяющиеся строки и границы диапазонов, если они встречаются в условии. Проверяется результат запроса, поэтому допустима эквивалентная реализация. Сначала решите задачу самостоятельно; продолжение практики доступно в полном курсе продвинутого SQL.

Номер сессии и позиция клика

Что уже дано

Таблица user_clicks(click_id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL, click_time TEXT NOT NULL). До 500 кликов, ID положительные; время UTC YYYY-MM-DD HH:MM:SS в 2024 году с точностью до секунды. У пользователя могут совпадать времена кликов.

Что нужно сделать

Разметьте все клики сессиями пользователя. Первый клик начинает сессию 1; следующий начинает новую сессию только при паузе строго больше 1800 секунд. Порядок кликов: click_time,click_id. Кроме номера сессии покажите gap_seconds — разницу с предыдущим кликом пользователя, NULL только у первого; session_event_no — порядковый номер клика внутри его сессии от 1.

Ввод и вывод

Отправьте один SELECT или WITH-запрос; stdin и печать не используются. Ровно 6 столбцов в указанном порядке и с этими именами: user_id, click_id, click_time, session_id, gap_seconds, session_event_no. Все столбцы кроме click_time — INTEGER; click_time — TEXT. NULL допустим только в gap_seconds первого клика пользователя. Сортировка: user_id ASC, click_time ASC, click_id ASC. Пустой журнал — пустой результат. В тестовых результатах разделитель |, NULL — пустое поле. Допускается любой эквивалентный запрос.

Пример

Подготовка данных
INSERT INTO user_clicks VALUES (1,1,'2024-01-01 10:00:00'),(2,1,'2024-01-01 10:29:59'),(3,1,'2024-01-01 10:59:59'),(4,1,'2024-01-01 11:30:00');
Вывод
1|1|2024-01-01 10:00:00|1||1
1|2|2024-01-01 10:29:59|1|1799|2
1|3|2024-01-01 10:59:59|1|1800|3
1|4|2024-01-01 11:30:00|2|1801|1
РешениеSQL · SQLite

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи