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累計に 最初から自分までの合計がはいります。
UNBOUNDED PRECEDING の他 UNBOUNDED FOLLOWING
などありますね。
これから愛用していきたいですね。
参考サイト
<https://qiita.com/tlokweng/items/fc13dc30cc1aa28231c5>
<https://sql55.com/query/cumulative-amount-1.php>