主要信息
author_tb如下(其中author_id表示创作者编号、author_level表示创作者级别,共1-6六个级别):answer_tb如下(其中answer_date表示创作日期、author_id指创作者编号、issue_id指回答问题编号): 最大连续回答问题的天数大于等于3天的用户及其等级(若有多条符合条件的数据,按author_id升序排序)
总体思路
最大连续天数问题,求解通用思路:是否连续例如1月10号、1月11号、1月12号、1月14号,行数分别为1、2、3、4,日期数-行数分别为1月9号、1月9号、1月9号、1月10号,可知道日期数-行数相同则为连续的天数 通过连续打卡时间分组统计过滤最后根据用户id关联其他用户信息返回.
注意:
date_add(answer_date,interval -rk day)函数实现日期与数字的加减
具体实现
使用窗口函数row_number标记当前用户回答问题天的记录所在行数,根据用户id分组,根据日期升序排列标记为rn 过滤出连续>=3天的rn,日期与rn作差相等则根据差值分组统计,存在大于等于3的拿出author_id 根据author_id关联author_tb和answer_tb最后返回用户id用户等级和连续回答天数
select author_id,author_level,cnt
from (select author_id,count(*) cnt
from (select author_id,
answer_date,
row_number() over(partition by author_id
order by answer_date) rk
from answer_tb) a
group by author_id,date_add(answer_date,interval -rk day)
having cnt>=3) b
join author_tb using(author_id)
order by author_id