SQLで増分の一覧から積算された一覧を取得する
この間の記事とは逆に増減の一覧があるが、そのレコード時点で合計するといくつになるのか一覧取得したい場合というのもやはりある。
mysql> select * from foo;
+---------------------+--------+
| created_at | in_out |
+---------------------+--------+
| 2014-06-26 00:00:00 | 10.0 |
| 2014-06-26 00:01:00 | -10.0 |
| 2014-06-26 00:02:00 | 30.0 |
| 2014-06-26 00:03:00 | 200.0 |
| 2014-06-26 00:04:00 | -100.0 |
| 2014-06-26 00:05:00 | 10.0 |
+---------------------+--------+
こんなテーブルがあるとする。
今回の場合、考え方は極めてシンプルで、そのレコードのcreated_at以前のin_outをsumすればその時点までの積算が取得できる。SQLもとても単純である。
select
F.created_at,
(
select
sum(F2.in_out)
from foo as F2
where F2.created_at <= F.created_at) as total
from foo as F;
実行例
mysql> select
-> F.created_at,
-> (
-> select
-> sum(F2.in_out)
-> from foo as F2
-> where F2.created_at <= F.created_at) as total
-> from foo as F;
+---------------------+-------+
| created_at | total |
+---------------------+-------+
| 2014-06-26 00:00:00 | 10.0 |
| 2014-06-26 00:01:00 | 0.0 |
| 2014-06-26 00:02:00 | 30.0 |
| 2014-06-26 00:03:00 | 230.0 |
| 2014-06-26 00:04:00 | 130.0 |
| 2014-06-26 00:05:00 | 140.0 |
+---------------------+-------+