题解 | 最长连续登录天数
最长连续登录天数
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;
查看25道真题和解析