- ベストアンサー
キー毎の、ある列のmaxのレコードを取得し、別の列の値を取得したい
下記のようなテーブルがあった場合に、 ID1|ID2|価格 ----------------------- 1 | 1 | 100 1 | 2 | 200 1 | 3 | 150 2 | 1 | 1000 2 | 2 | 500 3 | 1 | 50 3 | 2 | 100 下記のようなレコードを返してくるSQLを教えて下さい。 ID1 | ID2 | 価格 ----------------------- 1 | 3 | 150 2 | 2 | 500 3 | 2 | 100 要するに、ID1毎に、ID2が最大のレコードを取得し、価格列の数値を使いたいのです。 基本的なSQLは理解しているつもりなのですが・・・。 ご回答よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SQL> select * from test; ID1 ID2 XXX ---------- ---------- ---------- 1 1 100 1 2 200 1 3 150 2 1 1000 2 2 500 3 1 50 3 2 100 7行が選択されました。 SQL> select ID1 2 ,max(ID2) as ID2 3 ,max(XXX)keep(dense_rank Last order by ID2) as XXX 4 from test 5 group by ID1; ID1 ID2 XXX ---------- ---------- ---------- 1 3 150 2 2 500 3 2 100 SQL>
その他の回答 (1)
- nora1962
- ベストアンサー率60% (431/717)
select * from tbl t1 where not exists ( select 1 from tbl t2 where t1.id1=t2.id1 and t1.id2<t2.id2) とか select * from tbl t1 where id2 >= all(select id2 from tbl t2 where t1.id1=t2.id1) とか
お礼
やっぱりexists使わないとだめっすかねー パフォーマンス的にだいぶ劣るような気がした&慣れてない ので、できれば回避したかったんですが。 諦めて、ご提案のSQLを使う方向でじっくりとやってみます。