sql计算某个⽇期区间⽤户连续登陆最⼤天数
例:测试数据如下表(user_login_table)
注:对于⼯作⽇(上周五和下周⼀也界定为连续),则⽅法⼆适⽤
实现思路⼀:
  1、使⽤开窗函数row_number() 对每个user_id 的登陆⽇期进⾏排序,得到排名rn
  2、然后⽤login_date减去排名rn,得到⼀个新的⽇期new_date字段,⽐如,‘2021-10-01’减去1得到‘2021-09-30’,‘2021-10-02’减去2得到‘2021-09-30’......,减完之后得到的⽇期相同,则说明登陆⽇期连续
  3、之后按user_id和new_date,进⾏计数,得到login_days
  4、最后按user_id分组,取每个user_id对应login_days的最⼤值,即为该user_id的最⼤登陆天数max_login_days   
SQL:
  select user_id,max(login_days) max_login_days
    from (select user_id,new_date,count(*) login_days
      from (select user_id,
            login_date,
            row_number() over(partition by user_id order by login_date) rn,
            login_date - row_number() over(partition by user_id order by login_date) new_date
         from user_login_table)a
     group by user_id, new_date)b
   group by user_id;
实现思路⼆:
  1、⾃⼰创建⼀个⽇期表(包含分析期间的所有⽇期),表名(dic_date_table)
  2、使⽤开窗函数row_number() 对每个user_id 的登陆⽇期进⾏排序,得到排名rn
  3、使⽤开窗函数row_number()对⽇期表中的⽇期(dic_date)进⾏排序,得到rn_1
  4、将步骤2和3得到的结果,通过⽇期字段关联,然后⽤rn_1 - rn得到 num
  5、之后按user_id和num,进⾏计数,得到login_days
  6、最后按user_id分组,取每个user_id对应login_days的最⼤值,即为该user_id的最⼤登陆天数max_login_days     
html实现用户注册登录代码  将上⾯两表关联(login_date = dic_date)得到以下结果:
SQL:
  select T.user_id, max(login_days) max_login_days
    from (select t.user_id, t.num, count(*)  login_days
        from (select a.user_id, b.rn_1 - a.rn num
          from (select user_id,
                  login_date,
              row_number() over(partition by user_id order by login_date) rn
                from user_login_table)a
     left join (select dic_date,
            row_number() over(order by dic_date) rn_1
              from dic_date_table)b
    on a.login_date = b.dic_date)t
    group by t.user_id, t.num)T
    group by T.user_id;