PostgreSQL 同一日内の入出金データのグラフ化
最近は自分の口座の残高や入出金履歴などは銀行のオンランサイトのサービスにログインしてインターネット経由で確認することができるようになっています。今銀行サイトからダウンロードした口座の入出金データをグラフ化する際に少し困ったことがあったので、対処方法をメモします。
元データ
例えばこのような入出金と残高のデータがあるとします。
Dates : 日付
In Amount:入金履歴
Out Amount:出金履歴
Balance:残高

これをこのまま横軸:Dates、縦軸:Balanceで折れ線グラフを引くとこうなります。(可視化にはMetabaseというツールを使っています)

10/2にBalanceが40000を超えている?
プロットの数も合ってないし何かおかしい・・・
原因
これはBIツールが同じ日付のデータでgroup by して勝手にsumしてしまっているからです。当たり前といえば当たり前ですが、Datesのデータに同一のものがあることでこのようなことになってしまいます。
Datesが日付だけでなくTimestampならこれは回避できるのですが、残念ながら銀行からダウンロードできるcsvデータにはそこまでデータが残っておりませんでした。
対処法
元々のテーブル(account)に対して、シリアルのnumberを振り、それを利用して日付の後にシリアルを持つ文字列のDates_idというものを用意しました。
SQLは以下になります。
create view v_account as
select
cast(to_char(dates, 'yyyymmdd')||cast(row_number as varchar(10)) as varchar(18))as dates_id
,*
from
(
select
row_number() over()
,*
from account
) as T
出来上がったビュー。

これを横軸:Dates_id、縦軸:Balanceで再度描画すると、
それっぽくなりました。
