hive中使用sql 统计连续出现n次的用户

-- 有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。(活跃用户指连续两天都有访问记录的用户)

-- 日期 用户  年龄

--  11  test_1  23        tmp1                tmp2            tmp3          tmp4

--  11  test_2  19        11,test_1,23        11,test_1,1    test_1,10

--  11  test_3  39        11,test_2,19        13,test_1,2    test_1,11

--  11  test_1  23        11,test_3,39        11,test_2,1    test_2,10

--  11  test_3  39        12,test_2,19        12,test_2,2    test_2,10    test2

--  11  test_1  23        13,test_1,23        11,test_3,1    test_3,10

--  12  test_2  19

--  13  test_1  23

-- 连续两天的用户 活跃用户

-- 1 根据日期和user_id先去重 tmp1

select

    date_day,

    user_id

from

    tbl

group by

    date_day,user_id


-- 2 根据user_id分组,为每个用户的登陆记录按日期排序 tmp2

select

    user_id,

    date_day,

    rank() over(partition by user_id order by date_day) as rk

from

    tmp1


-- 3 获取日期与排名的差 tmp3

select

    user_id,

    date_sub(date_day,rk) as date_diff

from

    tmp2

-- 4 根据user_id,date_diff分组 如果时间连续 则date_diff一致,判断此时分组数据的数量 tmp4

select

    user_id

from

    tmp3

group by

    user_id,date_diff

having

    count(*) >= 2

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容