想象一下我有一个事件日志(按UserID
和Start
排序,Start_of_previous_event
是使用LAG()
,inactive time = Start - Start_of_previous_event
添加的):
UserID Event Start Start_of_previous_event inactive_time
1 Onboarding 2024-01-01 01:00:00 null null
1 Main 2024-01-01 01:01:00 2024-01-01 01:00:00 1
1 Cart 2024-01-01 01:05:00 2024-01-01 01:01:00 4
1 Main 2024-01-01 02:00:00 2024-01-01 01:05:00 55
2 Onboarding 2024-01-01 01:00:00 null null
如何添加带有session_ids的列?在闲置时间30分钟之后,对于新的UserID,新会话开始。
上面示例的Session_id列:
1
1
1
2
3
如果要对结果表进行如下分组,是否可以避免这种情况:
Select Event, Count(distinct session_id)
from sessions
group by Event
答案 0 :(得分:4)
您可以为会话分配日期算术和累计和。日期算术因数据库而异,但这应该可以使您了解:
select el.*,
sum(case when start_of_previous_event > start - interval '30 minute'
then 0 else 1
end) over (order by userid order by start) as session_cnt
from eventlog el;