Hive最大连续登陆天数

分类详情

  • 用户最大连续登陆天数
  • 问题汇总

用户最大连续登陆天数

问题是用户登陆埋点,会记录用户的id和记录的日期,原始数据如下:

id ds
A 2019-01-01
B 2019-01-02
A 2019-01-02
A 2019-01-04
B 2019-01-03
B 2019-01-04
B 2019-01-05

期望中的结果是统计用户A,和用户B分别最多连续登陆多少天:

id days
A 2
B 4

问题的难点是,数据按天储存,并不知道同一id相邻两次登陆是否是连续,虽然可以查看相邻date相减看是否为1,但是要求最大连续天数,count也比较难操作。
我的思路是:先按id分区,按照ds递减排序,给予rank,并将rank与ds相加,理论上rank是隔1递增的,如果日期连续,则日期是隔1递减,因此连续日期的ds+rank应该相同:

id ds rank rank+ds
A 2019-01-04 1 2019-01-05
A 2019-01-02 2 2019-01-04
A 2019-01-01 3 2019-01-04
B 2019-01-05 1 2019-01-06
B 2019-01-04 2 2019-01-06
B 2019-01-03 3 2019-01-06
B 2019-01-02 4 2019-01-06

再根据rank+ds聚合,则可以统计对于一个用户而言,其每段连续登陆操作的天数,然后取每个用户的最大登陆天数即可:

id rank+ds count
A 2019-01-05 1
A 2019-01-04 2
B 2019-01-06 4

代码如下:

SELECT id, MAX(num_days) AS max_continue
  FROM (
    SELECT id, tmp_index, COUNT(1) AS num_days
      FROM (
        SELECT id, ds
               ,DATE_ADD(ds, row_number() OVER (PARTITION by boss_id ORDER BY ds DESC)) AS tmp_index
          FROM da_tmp.boss_filter_xnc
         ) a
     GROUP BY id, tmp_index
     ) a
 GROUP BY id;

问题汇总

你可能感兴趣的:(Hive最大连续登陆天数)