这是Bar
中的数据:
ID FooID StartDate
1 1 1-1-2011
2 1 2-1-2011
3 1 3-1-2011
4 2 9-1-2011
5 2 4-1-2011
这是表Foo
:
ID Name
1 Car
2 Bus
我需要LEFT JOIN
最早出现的FROM Foo
这就是我现在拥有的:
SELECT NAME
FROM Foo
LEFT JOIN (
SELECT *
FROM Bar
WHERE Bar.FooID = Foo.ID
ORDER BY Bar.StartDate
) MyBar
ON (ROWNUM = 1)
但是出现了 ORA-00923。
最佳答案
我不太确定你想在这里做什么,但我认为你不能加入 rownum 也不能从内部选择中寻址 foo.id 。我可以给你这个方法,我认为它应该可以解决问题:
select name
from foo
left join (
select bar.*
, dense_rank() over (order by bar.startdate) as cand
from bar
) mybar
on (mybar.fooid = foo.id)
where mybar.cand = 1
它首先按开始日期对 bar 中的条目进行排名,然后通过 id 进行连接。外部仅选择排名 1 的候选者(最早开始日期)
关于sql - JOIN/GROUP 选择最早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19953944/