我需要获得按特定顺序排列一系列值的会话。
现在我有这个查询,它从原始数据返回每个用户的会话
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