WITH
### 每个月用户的
monthly_practices_u AS(
SELECT device_id,DATE_format(event_date,'%Y-%m') ym,COUNT(question_id) m_user_cnt
FROM question_practice_detail
GROUP BY DATE_format(event_date,'%Y-%m'),device_id
),
### 每个月总的
monthly_practices AS(
SELECT DATE_format(event_date,'%Y-%m') ym,COUNT(question_id) m_cnt
FROM question_practice_detail
GROUP BY DATE_format(event_date,'%Y-%m')
),
### 每个月用户累计的
monthly_practices_u_sum AS(
SELECT device_id,ym,SUM(m_user_cnt) OVER(partition by device_id order by ym) sum_cnt
FROM monthly_practices_u
),
### 每个月全局累计的
monthly_practices_sum AS(
SELECT ym,SUM(m_cnt) OVER(order by ym) total_cnt
FROM monthly_practices
),
### 每三个月平均的
3month_practices_avg AS(
SELECT
device_id,
ym,
ROUND(AVG(m_user_cnt) OVER(partition by device_id order by ym ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) avg3_cnt
FROM monthly_practices_u
)
SELECT t1.device_id,t1.ym,t1.sum_cnt,t3.avg3_cnt,t2.total_cnt
FROM monthly_practices_u_sum t1
INNER JOIN monthly_practices_sum t2
ON t1.ym= t2.ym
INNER JOIN 3month_practices_avg t3
ON t1.device_id = t3.device_id
AND t1.ym = t3.ym
ORDER BY t1.device_id,t1.ym