我是靠谱客的博主 搞怪小甜瓜,最近开发中收集的这篇文章主要介绍hive--连续登陆天数问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

登陆表:login_table

字段user_id,login_dt

连续登陆
user_idlogin_dt
a2020-06-01
a2020-06-02
a2020-06-03
b2020-06-01
b2020-06-02

 

 

 

 

 

 

 

创建表:

create table if not exists adm_sdk_activity_analysis_total(
     user_id               string  comment '用户id'
    ,login_date            string  comment '登录日期'
) STORED as orc;

解题思路:(借助rownumber)

1.根据user_id进行去重,按照登陆日期进行排序后,拿到rn

2.连续登陆的日期减去rn会得到相同的日期

3.根据user_id和相减后的值进行分组就能得到连续登陆天数

sql:

select user_id
     ,unify_login_date
     ,min(login_date) as start_date
     ,max(login_date) as end_date
     ,count(login_date)
from
    (
        select a.user_id
             ,a.login_date
             ,date_sub(a.login_date,rn) as unify_login_date --如果是连续登陆的日期,此操作会得到同样的归一化unify_login_date
        from
            (
                select user_id
                     ,login_date
                     ,row_number()over(partition by user_id order by login_date asc) as rn
                from  user_login_table
            ) as a
    ) as b
group by user_id,unify_login_date
having count(login_date) > N;

 

最后

以上就是搞怪小甜瓜为你收集整理的hive--连续登陆天数问题的全部内容,希望文章能够帮你解决hive--连续登陆天数问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部