SQL 累積を求める SUM() over (Partition By ** ROWS UNBOUNDED PRECEDING)

SQL で データ集計して、時系列のデータの累積を求める というテーマがあります。

つまり 開始から各行までの合計だったり、過去7回の累計で移動平均を求める など

これまではストアドプロシジャのカーソル処理で1行づつ計算する方法を採っていました。

 ところが、これが SUM関数にありました。

SUM(累計する列) over ( Partition by  ** Order By ** 
             ROWS UNBOUNDED PRECEDING )

 

--------------------------------------------------------

サンプル

SELECT Line,Num,OkNg,OkCnt

,SUM(OkCnt) over (Partition By Line order by Num ROWS UNBOUNDED PRECEDING) as Ok累計

FROM ( 省略 )

結果   OK累計に 最初から自分までの合計がはいります。

f:id:nminebb:20191209172306p:plain

UNBOUNDED PRECEDING の他  UNBOUNDED FOLLOWING

などありますね。

これから愛用していきたいですね。

 

参考サイト

<https://qiita.com/tlokweng/items/fc13dc30cc1aa28231c5>

<https://sql55.com/query/cumulative-amount-1.php>