Мне нужно получить сеансы, где у меня одна последовательность значений в определенном порядке.
Теперь у меня есть этот запрос, который возвращает сеансы для каждого пользователя из необработанных данных
select user_id, page, happened_at
from db as u1
where exists
(select 1 from db as u2
where u1.user_id = u2.user_id
and u2.happened_at < (u1.happened_at + interval '1 hour') )
ORDER BY user_id, happened_at
LIMIT 100
Мне нужно получить набор результатов в формате, который является результатом подзапроса для группы сеансов, которые я получаю по запросувыше.
Условия подзапроса - получить сеанс, в котором пользователь открыл страницу в определенном порядке.Например, значение страницы может быть - старт, работа, покупка, посадка, - пользователь должен пройти через каждую страницу в этом порядке во время сеанса.Он \ она все еще может встречаться с любыми другими страницами между каждой из них, но должен пройти через все эти страницы в этом порядке во время сеанса.
Как можно получить выходные данные, которые удовлетворяют такому условию?Как я могу понять изменения значения страницы в определенном порядке во время сеанса?
Набор данных при первом запуске запроса:
user_id page happened_at
3,230 start 2017-03-01 15:10
3,230 work 2017-03-01 15:16
3,230 start 2017-03-01 15:16
3,230 preview 2017-03-01 17:12
3,230 work 2017-03-01 17:12
3,230 buying 2017-03-01 17:13
3,230 landing 2017-03-01 17:51
3,230 smt else 2017-03-01 17:52
3,230 any page 2017-03-01 17:56
3,230 lanidng 2017-03-01 18:03
Вывод (что я сейчас ищу)
user_id page happened_at
3,230 start 2017-03-01 15:16
3,230 preview 2017-03-01 17:12
3,230 work 2017-03-01 17:12
3,230 buying 2017-03-01 17:13
3,230 landing 2017-03-01 17:51
Окончательный результат
user_id session_start session_end
3,230 2017-03-01 15:16 2017-03-01 18:03