- - PR -
版数が一番最新の金額だけを合計する場合のSQL文につきまして
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-23 11:06
お世話になります、newbornです。
標題の様に、版数が一番最新の金額だけを合計したいのですが、SQL文の作成でつまずいてしまったので、ご指導頂けましたら幸いです。 bukkenテーブル 主キー 物件番号 版数 金額 id | bukkenno | hansuu | kingaku 1 | 1 | 0 |100 2 | 1 | 1 |100 3 | 2 | 0 |200 4 | 2 | 1 |250 5 | 2 | 2 |250 6 | 3 | 0 |1000 上記のようなテーブルで、物件番号ごとに版数をもち(版数は0から順番にカウントアップされます)、物件番号ごとに一番新しいレコードの金額だけを合計して表示したく思っております。 上記レコードの場合、 物件番号1、版数1=100円 物件番号2、版数2=250円 +物件番号3、版数0=1000円 ------------------------------- = 1350円 という金額をSQL文で表現したいと思っております。 宜しくお願いいたします。 [ メッセージ編集済み 編集者: newborn 編集日時 2006-06-23 11:07 ] | ||||||||
|
投稿日時: 2006-06-23 11:35
RDBMSがなんなのか書いてないのですが、サブクエリが使えるという前提で、
でできるのではないでしょうか。もしサブクエリが使えないのなら、ビューを使えば いいと思います。 | ||||||||
|
投稿日時: 2006-06-23 11:57
uk様、
お早い返信ありがとうございます。 Sqlserver2000を使用しております。記載もれがありすみませんでした。 uk様のコードをそのままではエラーが出てしまい、多少書き換えて無事に結果を確認することができました。ありがとうございます。 SELECT A.bukkenno, A.hansuu, A.kingaku FROM bukken A INNER JOIN (SELECT bukkenno, MAX(hansuu) hansuu FROM bukken GROUP BY bukkenno) B ON A.bukkenno = B.bukkenno AND A.hansuu = B.hansuu ここでひとつ質問させていただきたいのですが、 bukkennoとhansuuで二重結合していると思うのですが、わたしのちっぽけな 経験で、二重結合すると処理がものすごく重くなったことがあるのですが、 二十結合=タブーということはないのでしょうか。 宜しくお願いいたします。 | ||||||||
|
投稿日時: 2006-06-23 12:42
Oracle 9i で出た現象ですが、
今回の例で、結合順を逆にした場合に、劇的に遅くなりました。 SELECT A.bukkenno, A.hansuu, A.kingaku FROM (SELECT bukkenno, MAX(hansuu) hansuu FROM bukken GROUP BY bukkenno) B INNER JOIN bukken A ON A.bukkenno = B.bukkenno AND A.hansuu = B.hansuu おそらく、Indexが関係していると思われます。 | ||||||||
|
投稿日時: 2006-06-23 12:48
自己結合といいます。 最初のSELECTの結果セットとサブクエリの結果セットが結合されるのは、 通常の結合と変わりありません。 かずさんもおっしゃるように、おそらくインデックス等の問題でしょう。 クエリアナライザで実行プランを確認してみてください。 | ||||||||
|
投稿日時: 2006-06-23 12:51
やっぱり確認しないとミスがありますね…すみません。
二重結合という用語は初めて見ましたが、結合条件のフィールドが複数ある、という 意味ですか? 検索してみても化学系の用語しか引っかからないのですが。 で、そういう意味だとして、それはインデックスの貼り方によるだろう、としか言えない ですね。また、複雑なクエリになるとオプティマイザが有効なプランを選択してくれない 場合があります。ですから、もしそうであればヒントを与えるなりすればいいと思います。 | ||||||||
|
投稿日時: 2006-06-23 13:20
皆様、
ご丁寧な解説有難うございます。 わたしも、二重結合という言葉を検索してみましたが、SQLではそのような 語句自体存在しないようです。 なぜか2つの結合条件で結合することを二重結合と呼ぶものとばかり勘違い しておりました。申し訳ありません。 RDBにAccessを使用して、開発しておりました際に複数の結合条件でテーブルを結合 した結果、SQLの実行速度が劇的に遅くなったことを記憶しており、わたしの中では、 複数の結合条件で結合することがいけない事だとばかり思っておりました。 (複数の結合条件で結合するばあい、〜 ON A.bukkeno+A.hasuu = B.bukkeno+B.hasuu というように、文字列として合体して結合させておりました(^^;) 皆様のおかげでまた正しい知識を得ることができました。 大変有難うございます。 | ||||||||
1
