#user_info uid
#examination_info exam_id
#exam_record uid+exam_id+start_time
#practice_record uid+question_id+submit_time
select
t.uid -- 全部用户
,count(distinct a.dt) as act_month_total -- 总活跃月份数
,count(distinct b.dt) as act_days_2021 -- 2021年活跃天数
,count(distinct c.exam_dt) as act_days_2021_exam -- 2021年试卷作答活跃天数
,count(distinct d.submit_dt) as act_days_2021_question -- 2021年答题活跃天数
from
(select
uid
,left(start_time,7) as dt
from exam_record
union all
select
uid
,left(submit_time,7) as dt
from practice_record) a -- 不限制表
left join
(select
uid
,date(start_time) as dt
from exam_record
where left(start_time,4)=2021
union all
select
uid
,date(submit_time) as dt
from practice_record
where left(submit_time,4)=2021) b -- 时间限制表
on a.uid = b.uid
left join
(select
uid
,date(start_time) as exam_dt
from exam_record
where left(start_time,4)=2021) c -- 时间限制作答表
on a.uid=c.uid
left join
(select
uid
,date(submit_time) as submit_dt
from practice_record
where left(submit_time,4)=2021) d -- 时间限制练习表
on a.uid=d.uid
right join user_info t
on a.uid= t.uid
where level>=6
group by 1
order by act_month_total desc,act_days_2021 desc;