• ベストアンサー

キー毎の、ある列の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は理解しているつもりなのですが・・・。 ご回答よろしくお願いします。

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

  • ベストアンサー
回答No.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)
回答No.1

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) とか

stolichnaya
質問者

お礼

やっぱりexists使わないとだめっすかねー パフォーマンス的にだいぶ劣るような気がした&慣れてない ので、できれば回避したかったんですが。 諦めて、ご提案のSQLを使う方向でじっくりとやってみます。

関連するQ&A