• ベストアンサー

グループ毎の最大値を持つデータのみ抽出したい

添付画像のようなデータがあって、赤字のところだけ出力したいと 思っています。 グループIDごとに、一番個数が大きいもの(同じ個数の場合、個別IDが 若いもの)を出したいのです。 (順位はグループごとにふられているので、グループごと同じです) 個数が同じデータがあるもので、単純にMAXのものを…とするのも 難しそうで困っています。 ご教授いただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • enemy
  • ベストアンサー率75% (3/4)
回答No.3

質問通りにSQL作るとこんな感じ SELECT MIN(t.個別ID) 個別ID, t.グループID, t.順位, t.個数 FROM table_1 t INNER JOIN (SELECT a.グループID, MAX(a.個数) 個数 FROM dbo.Table_1 a GROUP BY a.グループID) ex on ex.グループID=t.グループID AND ex.個数 = t.個数 GROUP BY t.グループID, t.順位, t.個数

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

テストしたら修正がありました。 例示のデータからご所望の結果が得られることを確認しました。 1)グループごとの個数最大値を求める(t1) 2)グループごとの個数最大値と同じ個数を持つ個別IDの最小値を求める(t2) 3)求めた最小値で列をSelect(t3) select t3.* from table1 as t3, ( select table1.グループID, min(table1.個別ID) as 最小個別ID from table1, ( select グループID, max(個数) as 最大個数 from table1 group by グループID ) as t1 where table1.グループID = t1.グループID and table1.個数 = t1.最大個数 group by table1.グループID ) as t2 where t3.個別ID = t2.最小個別ID

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

テストしてませんが。 こんな感じ? 1)グループごとの個数最大値を求める 2)グループごとの個数最大値と同じ個数を持つ個別IDの最小値を求める 3)求めた最小値の列をSelect select t3.* from table1 as t3, ( select min(t2.個別ID) as 最小個別ID from table1, ( select グループID, max(個数) as 最大個数 from table1 group by グループID ) as t1 where t2.グループID = t1.グループID and t2.個数 = t1.最大個数 ) as t2 where t3.個別ID = t2.最小個別ID

関連するQ&A