需求
有登录日志,求每个用户的每次连续登录的起始和结束日期
有用户登录日志如下:
表:user_login,userid:用户id,date:登录日期
为了简化说明这里date日期用数字表示。
| userid | date |
|---|---|
| A | 1 |
| A | 2 |
| A | 3 |
| A | 6 |
| A | 7 |
| A | 8 |
| A | 10 |
| … | … |
| B | 1 |
这里需求想要最终结果为:连续时间的起始,结束日期
| userid | s_date | e_date |
|---|---|---|
| A | 1 | 3 |
| A | 6 | 8 |
| A | 10 | 10 |
到这里可以先思考下如何用hivesql实现
分析
很明显这里是利用重分组思想,将连续的日期分到同一组之后,取组内的最大最小值即可
实现
select
t1.userid,
min(t1.date) as s_date,
max(t1.date) as e_date
from
(select
t.userid,t.date,
sum(t.flag) over (partition by userid order by t.date) as groupid
from
(select
userid,date,
if(date - lag(date,1,date) over(partition by userid order by date) > 1,1,0) as flag
from user_login
) t
) t1
group by t1.userid,t1.groupid
最后
喜欢的点赞、关注、收藏吧~ 感谢支持~~
本文介绍使用HiveSQL实现用户连续登录日期的起始与结束时间查询。通过重分组思想,对连续日期进行分组,并计算每组的最大最小日期来确定连续登录区间。
1589

被折叠的 条评论
为什么被折叠?



