# 计算每月的月活用户数,其他都以此推算而来
# 难点在于新增用户,需要模仿矩阵
WITH temp_0 AS(
SELECT uid, exam_id, DATE_FORMAT(start_time, "%Y%m") start_month, 
	# 定义新增用户,将单个用户首次登录的时间定义为最初时间,只有等于该时间的才算是首次登录1,其他都是老用户登录
    IF(start_time = MIN(start_time) OVER(PARTITION BY uid), 1, 0) first_time
FROM exam_record
)
# 查询,直接统计月活用户数,对每月的首次登录的用户数求和得到新增用户数,然后根据新增用户数类推出后两个字段
SELECT start_month, COUNT(DISTINCT uid) mau,
        SUM(first_time) month_add_uv,
        MAX(SUM(first_time)) OVER(ORDER BY start_month) max_month_add_uv,
        SUM(SUM(first_time)) OVER(ORDER BY start_month) cum_sum_uv
FROM temp_0
GROUP BY start_month