题解 | 最长连续登录天数
最长连续登录天数
https://www.nowcoder.com/practice/cb8bc687046e4d32ad38de62c48ad79b?tpId=375&tqId=10737573&ru=/exam/oj&qru=/ta/sql-big-write/question-ranking&sourceUrl=%2Fexam%2Foj
主要思路:
确定最长连续登陆天数的计算方法:对于用户1,如果日期连续,那么日期按顺序减去连续整数的结果应该相同,然后,只要分别对相同的做差结果进行计数,即可得到用户1在不同时间段中连续登陆的天数,最大的计数结果即为最长连续登陆天数。
注意:
1. 分层建立表格需要对每个子表格命名
2. fdate是字符串,做差需要调用date()将其变成能够相减的格式
3. 最内层根据题目要求筛选出基本表格,注意要对每条数据去重处理,确保用户在具体的某一天只有一条记录
4. 如果有多步计算,就一层层的嵌套表格,如果同时出现两个相关的计算式会出现计算冲突等问题。
select user_id,max(sup2) max_consec_days from( select user_id,count(sup1) sup2 from( select user_id,fdate, date(fdate)-rk sup1 from( select distinct user_id,fdate,row_number()over(partition by user_id order by fdate) rk from tb_dau t where fdate between '2023-01-01' and '2023-01-31') t1 ) t2 group by user_id,sup1 ) t3 group by user_id