IT Learning

実践形式でITのお勉強

PostgreSQL

PostgreSQL 同一日内の入出金データのグラフ化

投稿日:2019年11月17日 更新日:

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

元データ

例えばこのような入出金と残高のデータがあるとします。

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で再度描画すると、

それっぽくなりました。

Related

-PostgreSQL

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です