Hive SQL必刷练习题:同一个会话划分问题(*****)

问题描述:

​ 判断同一个用户,如果连续访问的时间间隔小于60s,就认为是同一个会话,或者说划分到同一个组。
在这里插入图片描述

解决思路:

​ 关键在于,找到开始不属于上一个会话,或者说不属于上一个组的那个时间点,所以就需要对每一行进行判断,如果他和上一个时间点还是属于同一组的,那就标记一个值,如果不是同一个组了,就需要标记一个明显可以区分开的值。其实这个思路类似于解决间断连续问题的思路。

如果这个时间差值小于60,我给标记一个1,大于60标记一个0
在这里插入图片描述

关键的地方来了!!之后我如果把这个标记累加起来【从最早之前到现在】,你可以发现是一个会话的,就是1,之后就会累加成2
在这里插入图片描述

这里需要学习的事情:
自己的思路只想到开窗然后多增加一列,但是不知道怎么处理如果大于60s的
这就用到增加一个标记1或者0,然后累加的思路

代码:

select user_id,
    page_id,
    view_timestamp,
    sum(session_start_point) over (partition by user_id order by view_timestamp) session_id
 from (
     select user_id,
         page_id,
         view_timestamp,
         if(view_timestamp-lagts>=60,1,0) session_start_point
     from (
          select user_id,
             page_id,
             view_timestamp,
             lag(view_timestamp, 1, 0) over (partition by user_id order by view_timestamp) lagts
          from page_view_events
        ) t1
   ) t2;
  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值