题解 | #每个6/7级用户活跃情况#
近三个月未完成试卷数为0的用户完成情况
http://www.nowcoder.com/practice/4a3acb02b34a4ecf9045cefbc05453fa
select uid, count(start_time) as exam_complete_cnt
from
(select*,
dense_rank()
over(partition by uid order by date_format(start_time, '%Y-%m')desc) as rk
from exam_record
) as t1
where rk <= 3
group by uid
having count(start_time) = count(submit_time)
order by
exam_complete_cnt desc,
uid desc
1、本题重点在于找到近三个月的作答记录 以及 筛掉近三个月未作答的用户
2、注意筛选月份时要倒序排序,因此月份大的排在前面
3、此处使用dense_rank()函数是因为dense_rank()函数是连续排序
4、比如筛选出的数据分别是'2021-10' '2021-09' '2021-09' '2021-08'这几个月的数据,那么用dense_rank()函数排序就为1、2、2、3;用rank()函数排序就为1、2、2、4;显然会出现错误