题解 | 最长连续登录天数
最长连续登录天数
https://www.nowcoder.com/practice/cb8bc687046e4d32ad38de62c48ad79b
# 在SQL中,使用WITH AS(即公用表表达式,CTE)连续定义多个临时表时,后续定义的临时表可以访问前面已定义的临时表 # 比如定义了Q1、Q2、Q3三个临时表,其中Q3引用了Q1和Q2的数据。这说明在同一个WITH子句中,后续的CTE可以使用前面定义的CTE的结果。不过需要注意的是,每个CTE只能引用之前定义的CTE,不能反向引用或者循环引用。 # SQL标准不允许在SELECT子句中对聚合函数(如COUNT)的结果再次使用聚合函数(如MAX)。 with a as ( select user_id, fdate, row_number() over ( partition by user_id order by fdate ) rn from tb_dau where fdate>='2023-01-01' and fdate<='2023-01-31' ), b as ( select user_id, date_sub(fdate, interval rn day) first_date from a ), c as ( select user_id, count(*) consec_days from b group by user_id, first_date having consec_days>1 ) select user_id, max(consec_days) max_consec_days from c group by user_id;