• 締切済み

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関数を使い試行錯誤しているのですが、 うまく行きません。どうか結合方法をご教示ください。 宜しくお願い致します。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

MAXを使った例です。 SELECT A.NAME,B.ID,B.DATE FROM Atable A INNER JOIN Btable B ON B.NAME=A.ID WHERE B.DATE IN (SELECT MAX(DATE) FROM Btable WHERE NAME=B.NAME)

すると、全ての回答が全文表示されます。
回答No.1

テーブル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もカラム名に使うのは良くないです。 (質問用の例題として書いただけだとは思いますけど、念のため)

すると、全ての回答が全文表示されます。

関連するQ&A