SELECT uid, MAX(day_window) AS days_window, ROUND(MAX(times)/MAX(day_total)*MAX(day_window), 2) AS avg_exam_cnt FROM ( SELECT uid, start_time, DATEDIFF(start_time, lag(start_time,1) over (partition by uid order by start_time))+1 AS day_window, COUNT(exam_id) OVER (PARTITION BY uid) AS times, DATEDIFF(FIRST_VALUE(start_time) over (partition by uid order by start_time DESC), FIRST_VALUE(start_time) over (partition by uid order by start_time))+1 AS day_total FROM exam_record WHERE uid IN ( SELECT uid FROM exam_record WHERE YEAR(start_time) = "2021" GROUP BY uid HAVING COUNT(exam_id) >= 2 ) AND YEAR(start_time) = "2021" ) data GROUP BY uid HAVING COUNT(DISTINCT DATE(start_time) ) >1 ORDER BY days_window DESC, avg_exam_cnt DESC