いちばん失敗した人決定戦

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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!