题解|16. 微博截止到当前每个用户已经连续签到的天数
微博截止到当前每个用户已经连续签到的天数
明确题意:
计算截止到6月13号每个用户已经连续签到的天数
问题拆解:
- 筛选2021-6-13及之前签到了的记录。知识点:where
- 对每个用户按签到日期倒序编号。知识点
row_number() over(partition by user_id order by sign_date desc); - 筛选签到日期加上序号天后为2021-06-14的记录(即连续签到至2021-06-13的记录)。知识点:where、DATE_ADD
- 统计每个用户的连续签到天数。知识点:按用户ID分组group by;对签到天数计数count
代码实现:
select user_id, count(*) as continuous_days
from (
select user_id, sign_date,
row_number() over(partition by user_id order by sign_date desc) as rn
from user_sign_d
where if_sign=1 and sign_date<="2021-6-13"
)as t_sign_date_rn
where DATE_ADD(sign_date, INTERVAL rn day)="2021-6-14"
group by user_id

查看11道真题和解析