以下のテーブルがあるとします。
テーブル名 売り上げテーブル
カラム(全て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にすれば効率よく意図するレコードを
取得できますでしょうか。
ご回答よろしくお願いいたします。
下記の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をテストしていないのでもし動かないときはすみません。
ダミー
書いてみましたが、ちょっと重たいかも。
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
ご回答ありがとうございます。
試してみます。
select * from 売り上げテーブル
where (売り上げID,明細ID,更新ID) in
(select 売り上げID,明細ID,max(更新ID) from 売り上げテーブル
group by 売り上げID,明細ID);
これでいかがでしょうか。
行数が多いのでしたら、索引「売り上げID,明細ID,更新ID」をつけることをお勧めします。
ご回答ありがとうございます。
試してみます。
先ほど回答で主キーは
売り上げID、明細ID,販売数
と、書きましたが
売り上げID,明細ID、更新ID
が正しいですかね。
結果は変わりませんが、訂正させてください。
ご回答ありがとうございます。
試してみます。