/*思路:先找出各个月份新增用户
  1.先求出各个用户的最早活动月份,作为子循环
  2.再在外部循环计算出各个月份出现的用户数极为每月新增用户
  可能会出现有些月份无新增,所以不会体现出来,这个时候需要用到左连接,计算出月活数
  */
select c.start_month
,c.mau
,coalesce(mon_add_cnt,0)
,max(mon_add_cnt) over(order by start_month) as max_month_add_uv
,sum(mon_add_cnt) over(order by start_month) as cum_sum_uv
from
(
    select date_format(start_time,'%Y%m') as start_month
           ,count(distinct uid) as mau
    from exam_record
    group by start_month
)c
left join 
  (
  select min_mon,count(a.uid) as mon_add_cnt
  from(
      select uid, date_format(min(start_time),'%Y%m') as min_mon
      from exam_record 
      group by uid
      )a
  group by min_mon
   )b
   on c.start_month = b.min_mon