如何根据列中的值对行编号

时间:2019-08-14 20:15:28

标签: sql oracle

想象一下我有一个事件日志(按UserIDStart排序,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

1 个答案:

答案 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;