SELECT start_month, COUNT(DISTINCT uid) AS mau, SUM(IF(rk=1,1,0)) AS month_add_uv, MAX(SUM(IF(rk=1,1,0))) OVER(ORDER BY start_month) AS max_month_add_uv, SUM(SUM(IF(rk=1,1,0))) OVER(ORDER BY start_month) AS cum_sum_uv FROM( SELECT uid, DATE_FORMAT(start_time,'%Y%m') start_month, ROW_NUMBER() OVER(PARTITION BY uid ORDER BY DATE_FORMAT(start_time,'%Y%m')) rk FROM exam_record )t GROUP BY start_month ORDER BY start_month