質問: 1:nの結合結果として最新日付のもので1:1としたい。 oracle9i enterprise edition r2の環境下で 以下のような2つのテーブルをを結合し [output]の内容を抽出したいと思っております。 a table (顧客) **************************************** id name a001 robart a002 todd b table (履歴) **************************************** id name date b001 a001 08/04/01 b002 a001 09/04/30 b003 a001 09/04/10 b004 a002 09/02/13 b005 a002 09/03/02 [output] **************************************** a.name b.id b.date a001 b002 09/04/30 a002 b005 09/03/02 aテーブル単位にbテーブルの最新日付の レコードを結合して抽出したいのですが、 max関数を使い試行錯誤しているのですが、 うまく行きません。どうか結合方法をご教示ください。 宜しくお願い致します。
回答: テーブルbだけでも、それらしき結果は得られるかと思います。 select x.name,x.id,x.date from ( select name,id,date,row_number() over(partition by name order by date desc) r from b ) x where r=1 ; テーブルaにあるものだけに限定するのであれば、上記のsqlとテーブルaの内部結合で、 お望みの結果になるかと。 蛇足ですが・・ テーブルaのid,nameとテーブルbのid,nameの使い方が違うので混乱しやすいんじゃないですかね。 それと予約語のdateもカラム名に使うのは良くないです。 (質問用の例題として書いただけだとは思いますけど、念のため)