select
uid
,days_window
,round(ct/all_day*days_window,2) avg_exam_cnt
from(
select
uid
,max(ifnull(days_window,0))+1 days_window
,sum(ifnull(days_window,0)) sum_days
,avg(all_day)+1 all_day
,avg(ct) ct
from(
select
uid
,datediff(start_time,lead_time) days_window
,datediff(max_time,min_time) all_day
,count(*) over(partition by uid) ct
from(
select
uid
,start_time
,lead(start_time,1) over(partition by uid order by start_time desc) lead_time
,max(date(start_time)) over(partition by uid) max_time
,min(date(start_time)) over(partition by uid) min_time
from exam_record
where year(start_time) = 2021
)a
)b
# where max(ifnull(days_window,0)) >=1
group by uid
)c
where days_window > 1
order by days_window desc,avg_exam_cnt desc