人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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にすれば効率よく意図するレコードを
取得できますでしょうか。

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


●質問者: dragon23
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Char Oracle SQL カラム グループ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● freemann
●23ポイント

下記の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

◎質問者からの返答

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

試してみます。


2 ● katsube
●23ポイント

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

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

◎質問者からの返答

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

試してみます。


3 ● kunit_mac
●22ポイント

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」をつけることをお勧めします。

◎質問者からの返答

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

試してみます。


4 ● freemann
●22ポイント

先ほど回答で主キーは

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

と、書きましたが

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

が正しいですかね。

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ