如何在另一列上使用MAX从一行中选择字段?

时间:2014-02-26 15:32:02

标签: sql oracle

我想使用表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 ...

我迷路了 - 有人可以帮忙吗?

谢谢!

2 个答案:

答案 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 (+);