
eg:統計1-12月的累積銷量,即1月為1月份的值,2月為1.2月份值的和,3月為123月份的和,12月為1-12月份值的和
SELECT month,SUM(amount) month_amount, SUM( SUM(amount)) OVER (ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_amount FROM table_name GROUP BY month ORDER BY month;
其中: SUM( SUM(amount)) 內部的SUM(amount)為需要累加的值,在上述可以換為 month_amount ORDER BY month 按月份對查詢讀取的記錄進行排序,就是窗口范圍內的排序
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 定義起點和終點,UNBOUNDED PRECEDING 為起點,表明從第一行開始, CURRENT ROW為默認值,就是這一句等價於:
ROWS UNBOUNDED PRECEDING
PRECEDING:在前 N 行的意思。
FOLLOWING:在后 N 行的意思。
計算前3個月之間的和
SUM( SUM(amount)) OVER (ORDER BY month ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS cumulative_amount
或者
SUM( SUM(amount)) OVER (ORDER BY month 3 PRECENDING) AS cumulative_amount
前后一個月之間的和
SUM( SUM(amount)) OVER (ORDER BY month ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS cumulative_amount
統計7.23到7.26的累計和,實現結果為:
2018-07-23 10527150773 10527150773
2018-07-24 11799445150 22326595923
2018-07-25 11238537810 33565133733
2018-07-26 10917352755 44482486488
select datemion,sum(loan_amount),sum(sum(loan_amount)) OVER (ORDER BY datemion ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from( select datemion,strdeptcode,loan_amount,b.busiarea_code from a inner b on a.strdeptcode = b.dept_code where a.datemion between '2018-07-23' and '2018-07-26') a group by datemion
如果按照每個月內去累加,添加分區字段即可,表示按月分區,每個月內進行累加求和,從當月1號到月末:
select datemion,sum(loan_amount),sum(sum(loan_amount)) OVER (distribute by date_format(datemion,'yyyy-MM') sort BY datemion ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from( select datemion,strdeptcode,loan_amount,b.busiarea_code from app.app_total_busioverview_aggre a inner join dim.dim_department_v b on a.strdeptcode = b.dept_code where a.datemion between '2018-07-23' and '2018-09-26') a group by datemion order by datemion;
