У меня есть таблица, для которой мне нужно создавать сеансы. В этой таблице пользователь регистрируется и событие, которое произошло в приложении. Эти сеансы необходимо разделить, когда запись события является логином. Любая запись с тем же пользователем, которая появляется после входа в систему, является частью того же сеанса, пока не появится новая запись в журнале событий.
Таким образом, к результату должны добавляться два пользователя и события Cols, а также разделение сеанса, сгруппированное по User и когда Event = 'app:login'
.
Я создал это очень основное визуальное представление моей цели. Не уверен, что это поможет исправить пробелы в моих объяснениях.
Я думал что-то вроде использования GROUP BY, а затем присоединяюсь к этому результату, чтобы затем конкатрировать его в каждой строке.
Я нашел свой ответ, объединив некоторые случайные sql, пока не получил свой результат.
SELECT *
, "userid" || '_' || SUM(new_session)
OVER (PARTITION BY "userid" ORDER BY "datetime") AS session_id
FROM (
SELECT
*,
CASE WHEN "eventname" = 'login:bo:success' THEN 1 ELSE 0 END as new_session
FROM
"TEST_events_prepared_2"
) s1