仕事で累計を求める必要が生じた。さんざん悩んだ結果、簡単にできることを知ったため、忘備録として残す。
ItemCode | date | siire | syukka |
---|---|---|---|
A | 2019-02-01 16:45:31 | 100 | 0 |
A | 2019-02-02 18:02:35 | 50 | 150 |
A | 2019-02-03 16:15:00 | 50 | 25 |
A | 2019-02-04 18:11:06 | 25 | 50 |
このような表(zaiko_hyou
)があったとして
ItemCode | date | siire | syukka | zaiko |
---|---|---|---|---|
A | 2019-02-01 16:45:31 | 100 | 0 | 100 |
A | 2019-02-02 18:02:35 | 50 | 150 | 0 |
A | 2019-02-03 16:15:00 | 50 | 25 | 25 |
A | 2019-02-04 18:11:06 | 25 | 50 | 0 |
という表にしたいとき、とりあえずview(v_zaiko_hyou
)を作成して当日の在庫増減を算出。
ItemCode | date | siire | syukka | toujitu_zaiko |
---|---|---|---|---|
A | 2019-02-01 16:45:31 | 100 | 0 | 100 |
A | 2019-02-02 18:02:35 | 50 | 150 | -100 |
A | 2019-02-03 16:15:00 | 50 | 25 | 25 |
A | 2019-02-04 18:11:06 | 25 | 50 | -25 |
作成したview(v_zaiko_hyou)のtoujitu_zaikoに対し、window関数を用いて累計を行うことで在庫数が表現できる。
zaiko.sql
SELECT
*,
SUM(toujitu_zaiko)(PARTITION BY ItemCode ORDER BY date )AS zaiko,
FROM
v_zaiko_hyou