我想使用表A中的外连接到表B上的一行(可能不存在)。我需要加入表B中的日期字段,该日期字段应取自序列号最高的行。
e.g。
表B:
ID | A_DATE | SEQNO
1 01/01/1950 10
1 01/01/2000 5
所以在这里我需要使用A.id = 1 and A.a_date = 01/01/1950
(ID 1的最高序列号)加入A和B作为ID 1。
我不认为这种语法是正确的:
SELECT ...
FROM a, b
WHERE a.id (+) = b.id
AND ...
我迷路了 - 有人可以帮忙吗?
谢谢!
答案 0 :(得分:1)
您可以使用a_date
关键字获取与seq_no
的最大值相关联的keep
:
select ...
from a join
(select max(A_DATE) keep (dense_rank first order by seq_no desc) as max_a_date
from b
) bmax
on a.a_date = b.max_a_date;
查询的其余部分刚加入此日期。这个查询不需要外部联接,至少我理解这个问题。
注意:这假设表b存在。无论表是否存在,都无法编写可以正常运行的常规SQL查询。
答案 1 :(得分:0)
我不知道我是否正确理解。
试试这个:
select ...
from (select id,
max(A_DATE) over(partition by id) as a_date
from a) a,
b
where a.id = b.id (+)
and a.a_date = b.b_date (+);