select exam_id, date_format(start_time, '%Y%m') as start_month, count(*) as month_cnt, sum(count(*)) over (partition by exam_id order by date_format(start_time, '%Y%m') rows between unbounded preceding and current row) as cum_exam_cnt from exam_record group by exam_id, date_format(start_time, '%Y%m') order by exam_id, start_month;