指定日以前の最新値を取り出す
sqlである日以前の最新の時の値を取り出す - imHo を見て、書いてみました。
mokehehe さんのとは逆に、日付→残高→口座の順に取得するイメージ。
Oracle だと date は予約語なので名前を変えたり、↓の本の影響で id → account_id としたりしてます。
結合する表が3つになるのは仕方ないと思うので、あとは各クエリをどれだけ簡単に書けるかということかな。
SELECT a.account_id, b1.day, b1.amount FROM balance b1 INNER JOIN ( SELECT account_id, max(day) AS day FROM balance WHERE day < 日付 GROUP BY account_id) b2 ON b1.account_id = b2.account_id AND b1.day = b2.day RIGHT OUTER JOIN account a ON b1.account_id = a.account_id WHERE a.user_id = 顧客ID ORDER BY a.account_id ;
SQL のインデントって、毎回ものすごく悩みます。今回のはそんなに悪くないかも。
データベース実践講義 ―エンジニアのためのリレーショナル理論 (THEORY/IN/PRACTICE)
- 作者: C.J.Date,株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2006/02/01
- メディア: 大型本
- 購入: 4人 クリック: 170回
- この商品を含むブログ (56件) を見る