oracle 9iのSQLについての質問です。

以下のテーブルがあるとします。

テーブル名 売り上げテーブル
カラム(全てchar)
   :売り上げID
   :明細ID
   :販売数
:更新ID

このテーブルから売り上げIDと明細IDをグループ化
して更新IDがそれぞれ最大の販売数を取得したいのです。

 つまり

売り上げID,明細ID,販売数,更新ID
1,1,100,1
1,1,200,2
1,1,400,3
2,1,100,1
2,1,300,3

というレコードがある場合は
1,1,400,3
2,1,300,3
というような結果を取得したいのです。

大きなテーブルなので出来るだけ効率よく取得したいのですが、よいSQLが組めずに困っています。どのようなSQLにすれば効率よく意図するレコードを
取得できますでしょうか。

 ご回答よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2006/07/30 08:04:14
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:freemann No.1

回答回数335ベストアンサー獲得回数55

ポイント23pt

下記のSQLは、売り上げID、明細ID,販売数が主キーであるということを前提しています。

販売数も結果にほしいのならば

SELECT A.売り上げID,A.明細ID,A.販売数,A.更新ID

FROM 売り上げテーブル A ,(SELECT 売り上げID,明細ID,MAX(更新ID) AS 更新ID FROM 売り上げテーブル GROUP BY 売り上げID,明細ID) B

WHERE A.売り上げID = B.売り上げID AND A.明細ID = B.明細ID AND A.更新ID = B.更新ID

というのはどうでしょう?SQLをテストしていないのでもし動かないときはすみません。

ダミー

http://q.hatena.ne.jp/1154137097

id:dragon23

ご回答ありがとうございます。

試してみます。

2006/07/30 08:02:47
id:katsube No.2

回答回数133ベストアンサー獲得回数7

ポイント23pt

書いてみましたが、ちょっと重たいかも。

SELECT B.uriage_id, B.meisai_id, A.hanbai, B.update_id
FROM   tablename A,
       (select uriage_id, meisai_id, max(update_id) as update_id
        from tablename
        group by uriage_id, meisai_id) B
WHERE A.uriage_id = B.uriage_id
AND   A.meisai_id = B.meisai_id
AND   A.update_id = B.update_id

http://q.hatena.ne.jp/1154137097

id:dragon23

ご回答ありがとうございます。

試してみます。

2006/07/30 08:03:09
id:kunit_mac No.3

回答回数43ベストアンサー獲得回数0

ポイント22pt

http://www.yahoo.co.jp/


select * from 売り上げテーブル

where (売り上げID,明細ID,更新ID) in

(select 売り上げID,明細ID,max(更新ID) from 売り上げテーブル

group by 売り上げID,明細ID);

これでいかがでしょうか。

行数が多いのでしたら、索引「売り上げID,明細ID,更新ID」をつけることをお勧めします。

id:dragon23

ご回答ありがとうございます。

試してみます。

2006/07/30 08:03:22
id:freemann No.4

回答回数335ベストアンサー獲得回数55

ポイント22pt

先ほど回答で主キーは

売り上げID、明細ID,販売数

と、書きましたが

売り上げID,明細ID、更新ID

が正しいですかね。

結果は変わりませんが、訂正させてください。

http://q.hatena.ne.jp/answer

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません