# 思路:
# 1、按照sql试卷未完成率高的前50%的用户中,6、7级用户筛选出来
# 做法:(1)未完成率前50%,row_number() count()
# (2)筛选6 7级用户
# 2、将满足条件用户的作答记录从exam_record中挑选出来,计算答卷数目、完成数目
# 做法:(1)将日期用date_format转换成年月形式,通过dense_rank排序,按照排名挑选最近三个月记录
# (2)计算答卷数目和完成数目
select distinct t3.uid,t3.start_time,
count(t3.start_time) over(partition by t3.uid,t3.start_time) as total_cnt
,count(t3.submit_time) over(partition by t3.uid,t3.start_time) as complete_cnt
from (
select e2.uid,date_format(e2.start_time,'%Y%m') as start_time
,e2.submit_time
,DENSE_RANK() over(partition by e2.uid order by date_format(e2.start_time,'%Y%m') desc ) as rank_start_time
from exam_record as e2 where
e2.uid in (
select t3.uid from (
select t1.uid,t1.imcom_rate,t1.level
,percent_rank() over(order by imcom_rate desc) as rank_imcom
from (
select e1.uid,u1.level
,(count(*)-count(e1.submit_time))/count(*) as imcom_rate
from exam_record as e1
left join user_info as u1 on e1.uid=u1.uid
group by e1.uid) t1) t3
where rank_imcom<=0.5 and t3.level in (6,7))) t3
where t3.rank_start_time <=3 order by t3.uid,t3.start_time