题解 | #最长连续登录天数#
最长连续登录天数
https://www.nowcoder.com/practice/cb8bc687046e4d32ad38de62c48ad79b
with tmp as ( select user_id, fdate, lag (fdate, 1, "0000-00-00") over ( partition by user_id order by fdate ) fadte_sub from tb_dau where fdate between "2023-01-01" and "2023-01-31" ) #使用lag 窗口函数,按用户id分组,登陆日期升序,进行日期偏移, tmp2 as ( select user_id, fdate, fadte_sub, datediff (fdate, fadte_sub) as diff_date, if (datediff (fdate, fadte_sub) < 2, "0", fdate) as dt_line from tmp ) # 登陆日期和偏移日期作差,如果日期差小于2(连续日期差为1,间隔一天算连续日期差为2,其余以此类推),则为连续登录,记作0,否则为当前登录日期。, tmp3 as ( select *, max(dt_line) over ( partition by user_id order by fdate ) as max_dt_line from tmp2 ) # 利用窗口函数max,将连续登录的日期修正成起始登录日期 select user_id, max(consec_days) as max_consec_days from ( select user_id, max_dt_line, count(*) as consec_days from tmp3 group by user_id, max_dt_line ) tmp4 group by user_id # 根据起始登录日期分组找到最大值