• 締切済み

キーのフィールドが最大値の他フィールドのデータ抽出

下記のようなテーブルがあったとします。 ----------------------  (1) | (2) | (3)  ----------------------  A | 3 | あ  A | 1 | い  A | 5 | う  B | 3 | え  B | 2 | お ---------------------- フィールド(1)がグループで、それぞれAグループ、 Bグループとします。 このとき、それぞれのグループ内のフィールド(2)が 最大のレコードのフィールド(3)データを抽出したいのですが、 どのようにすればよいでしょうか? 上記の例で言うと、 ----------------------  (1) | (2) | (3)  ----------------------  A | 5 | う  B | 3 | え ---------------------- という結果を得たいのですが・・・

みんなの回答

回答No.2

>どれか適当に1つ抽出です。 2件以上該当するデータがあるのに、その中から1件を抽出するためには、通常は行を一意に定められるキーが必要です。 「どれか適当に一つ抽出」という作業をSQLでやろうとすると、冗長でオーバーヘッドの大きいものになってしまいます。バージョン4.0系以前では、一つのSQLでは困難かも知れません。 それを分かった上で、質問されていませんよね? したがって、列(1)でグループ化した上で、各グループの列(2)の最大値を求めた上で、列(3)の値が複数あり得るなら、どれを取り出すかの工夫が必要になります。 該当する列(3)の値をすべて取り出してよいなら、MySQL 4.0系以前では、一時表を使うといった作業が必要でしょう。 【MySQL 4.0系以前】 create temporary table wt1 as select c1,max(c2) as c2 from t1 group by c1 ; select t1.* from t1,wt1 where t1.c1=wt1.c1 and t1.c2=wt1.c2 order by t1.c1 ; drop temporary table wt1; なお、参考までにMySQL 4.1以降なら、以下のような1SQLで同じ結果を得られます。 【MySQL 4.1~】 select * from t1 where (c1,c2) in( select c1,max(c2) from t1 group by c1 ) ;

gaogao30
質問者

お礼

ご返答ありがとうございます。 どうやら私には基本的な知識が欠けているようなので もう一度勉強し直します。 お手数をお掛けしてすいません。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

今回はたまたま(2)の最大値は各グループに1つしかありませんが 2つ以上あるときは全て抽出するのでしょうか? それともどれか適当に1つ抽出すればよろしいのでしょうか? それによってダイブ違います。 それとmysqlのバージョンによって書き方がことなるので それも提示した方がよろしいでしょう

gaogao30
質問者

補足

ご返答ありがとうございます。 >今回はたまたま(2)の最大値は各グループに1つしかありませんが >2つ以上あるときは全て抽出するのでしょうか? >それともどれか適当に1つ抽出すればよろしいのでしょうか? >それによってダイブ違います。 どれか適当に1つ抽出です。 >それとmysqlのバージョンによって書き方がことなるので >それも提示した方がよろしいでしょう mysqlのバージョンは 4.0.24 です。 誠にお手数ですが、よろしくお願いします。

関連するQ&A