あなたはA
のためのダミーデータを提供するために、CTEを使用し
複数回、各テーブル(または特異的B
を)打つ避けるためにanalytic functionsを使用することができますし、B
あなたがこれを行うことができます:
with A as (
select 1 as id from dual
union all select 2 from dual
union all select 3 from dual
),
B as (
select 1 as a_id, date '2012-01-01' as created_date, 'First for 1' as value
from dual
union all select 1, date '2012-01-02', 'Second for 1' from dual
union all select 1, date '2012-01-03', 'Third for 1' from dual
union all select 2, date '2012-02-01', 'First for 2' from dual
union all select 2, date '2012-02-03', 'Second for 2' from dual
union all select 3, date '2012-02-01', 'First for 3' from dual
union all select 3, date '2012-02-03', 'Second for 3' from dual
union all select 3, date '2012-02-05', 'Third for 3' from dual
union all select 3, date '2012-02-09', 'Fourth for 3' from dual
)
select id, created_date, value from (
select a.id, b.created_date, b.value,
row_number() over (partition by a.id order by b.created_date desc) as rn
from a
join b on b.a_id = a.id
)
where rn = 1
order by id;
ID CREATED_D VALUE
---------- --------- ------------
1 03-JAN-12 Third for 1
2 03-FEB-12 Second for 2
3 09-FEB-12 Fourth for 3
あなたはA
とB
からあなたが望む任意の列を選択することができますが、両方のテーブルに同じ名前のいずれかがある場合は、サブクエリでそれらをエイリアスする必要があります。
同じ作成日の子レコードを持つことができる場合は、row_number
の代わりにrank()
またはdense_rank()
を適切に処理する必要があります。
いくつかのデータサンプルとテーブル構造を提供できますか?それはより速く、より速いです..誰もが確認し、助けることができます。 –