HIVE 计算连续n天登陆的用户

----用户连续n天登陆天数
SELECT  device_id
        ,diff_date --根据连续登陆的起始日期计算连续登陆天数
        ,COUNT(ds)
FROM    (
            SELECT  device_id
                    ,ds
                    ,ROW_NUMBER() OVER (PARTITION BY device_id ORDER BY ds ) rnk  ---计算当前日期 在 统计时间段内 的排名
                    ,ds-ROW_NUMBER() OVER (PARTITION BY device_id ORDER BY ds ) diff_date  ---计算当前日期 在 统计时间段内减去排名后的起始日期(表示连续登陆的起始日期)
            FROM    (
                        SELECT  device_id
                                ,ds
                        FROM    xxx
                        WHERE   ds >= '20201101'
                        AND     ds <= '20201201'
                        GROUP BY device_id
                                 ,ds
                    ) tmp
        ) 
GROUP BY device_id
         ,diff_date
HAVING  COUNT(ds) >= 3 --写连续n天的登陆用户

 

代码部分解析:

tmp表内的查询结果:截图内为同一个deviceid的日期计算(很通俗易懂了)

HIVE 计算连续n天登陆的用户_第1张图片

你可能感兴趣的:(数据分析挖掘,数据查询,数据仓库)