主要信息

  • 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关联其他用户信息返回

具体实现

  • 使用窗口函数row_number标记当前用户回答问题天的记录所在行数,根据用户id分组,根据日期升序排列标记为rn
  • 过滤出连续>=3天的rn,日期与rn作差相等则根据差值分组统计,存在大于等于3的拿出author_id
  • 根据author_id关联author_tb和answer_tb最后返回用户id用户等级和连续回答天数
SELECT author_id, author_level, days_cnt
FROM (
	SELECT author_id, count(*) AS days_cnt
	FROM (
		SELECT *, row_number() OVER (PARTITION BY author_id ORDER BY answer_date ASC) AS rn
		FROM answer_tb
	) t
	GROUP BY author_id, DATE_ADD(answer_date, INTERVAL -rn DAY)
	HAVING days_cnt >= 3
) t1
	LEFT JOIN author_tb t2 USING (author_id)
ORDER BY author_id;