需求
有登录日志,求每个用户的每次连续登录的起始和结束日期
有用户登录日志如下:
表: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
最后
喜欢的点赞、关注、收藏吧~ 感谢支持~~