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: Агрегация, оконные вычисления и фильтрация — Категории-лидеры и доля в продажах
- SQL: Календарная таблица и пропущенные даты — Непрерывный отчёт о звонках
- SQL: Коррелированные подзапросы и EXISTS — Клиенты с завершённым заказом от 1000
- SQL: RFM-анализ на дату среза — RFM и покупки за последний месяц
- SQL: Взвешенное среднее и агрегация показателей — Общий средний чек через агрегаты категорий
- SQL: Обход дерева: глубина и путь — Пути, корни и листья всего каталога
