転職した

調べた事、学んだ事、思った事、考えた事を個人的にまとめているだけなので内容は保証しないYO!

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 |

+---------------------+-------+