# ## 先把提交时间转化一下:
# SELECT DATE_FORMAT(submit_time) AS start_month,COUNT(DISTINCT uid) AS mau
# FROM exam_record
# GROUP BY start_month
############################ 这里写的两句是错误的 ##############################
# ## 新增用户new_user:MIN(start_month) = MAX(start_month)
# ## 新增用户数month_add_uv:COUNT(IF(MIN(start_month = MAX(start_month),1,0) AS new_user_cnt

############################ 出错的原因就在于:没有把新用户的SQL写正确 ###############################
# 查询用户第一天登录的日期:按照uid进行分组,最早的start_time作为第一天登录new_user_day这一列
# MIN(start_time) OVER(PRITITION BY uid) AS new_user_day
# 定义新用户:新增一列new_user,如果为1代表是新用户,如果为0代表不是新用户 ~~~~~
# IF(start_time = MIN(start_time) OVER (PARTITION BY uid),1,0) AS new_user

# SELECT DATE_FORMAT(submit_time) AS start_month,COUNT(DISTINCT uid) AS mau,
# COUNT(IF(MIN(start_month) = MAX(start_month),1,0)) AS month_add_uv
# FROM exam_record
# GROUP BY start_month

# MAX(month_add_uv) OVER(ORDER BY start_month) AS max_month_add_uv
# SUM(month_add_uv) OVER(ORDER BY start_month) AS cum_sum_uv

SELECT start_month,COUNT(DISTINCT uid) mau,SUM(new_user) month_add_uv,
MAX(SUM(new_user)) OVER(ORDER BY start_month) max_month_add_uv,
SUM(SUM(new_user)) OVER(ORDER BY start_month) cum_sum_uv
FROM(
    SELECT *, DATE_FORMAT(start_time,'%Y%m') start_month,
    IF(start_time = MIN(start_time) OVER (PARTITION BY uid),1,0) new_user
    FROM exam_record)t1
GROUP BY start_month

# SELECT start_month ,#每个月
#     COUNT(DISTINCT uid) mau, #月活用户数   
#     SUM(new_day) month_add_uv, #新增用户
#     MAX(SUM(new_day))OVER(ORDER BY start_month) max_month_add_uv, #截止当月的单月最大新增用户数
#     SUM(SUM(new_day))OVER(ORDER BY start_month) cum_sum_uv
# FROM (
#     SELECT *,DATE_FORMAT(start_time,'%Y%m') start_month,     IF(start_time=MIN(start_time)OVER(PARTITION BY uid),1,0) new_day
#     FROM exam_record)t1
# GROUP BY start_month;