読者です 読者をやめる 読者になる 読者になる

『金澤小遣帳』のバックアップDBを読むSQL書いた

 『金澤小遣帳』のバックアップデータのを PC に送って拡張子変えて展開してみたら SQLite3 で開けた、という話の続きで、その DB から csv でデータを取ってくるための SQL を書いた。

 

 最初は単純にテーブルをがしゃがしゃ join して select 文でぶっこ抜けばいいや、くらいに考えていたんだけど、そうは一筋縄ではいかなくて、どういうわけか、お金の移動、例えば「PASMOにチャージする(現金の残高を減らす&PASMOの残高を増やす)」といった処理を記録するレコードがことごとく '2000-01-01' という日付になっていた。自分の家計簿データの receipt テーブルを見ると

 

140|2012-11-17|イオン東雲店|0|1|

141|2012-11-17|エクセルシオールカフェ晴海店|0|0|

142|2000-01-01||100|4|

143|2000-01-01||110|0|

144|2012-11-17|ローソンアクアシティお台場|0|4|

145|2012-11-17|メディアージュお台場|0|0|

 
と、唐突に '2000-01-01' という日付が出てきて、これではあとで表計算ソフトに読み込ませたときに不便極まりない。

 

 なので相関サブクエリを使って日付が '2000-01-01' になってるところを近い日付で代替させるようにしてみた。具体的には、日付が '2000-01-01' になっているレコードを見つけたら、それより receipt_id が小さい(=それより前に入力された)レコードから一番大きい日付を探してきて、それで近似的に代替するようにしてある。

 

 これで『金澤小遣帳』の入力データを PC 上で表計算ソフトに取り込むことができるようになり、心おきなくデータを入力しまくれるようになってめでたしめでたし。

 やーしかし自分これまで他人が書いた SQL を実行するだけしか経験なかったので(あるいはせいぜい select * するくらい)、CASE文やら相関サブクエリやら使った SQL を一から書いたの、たぶんこれが生まれて初めてだ。すらすら SQL 書ける DBA の人たち尊敬するわー。