如何在Oracle中执行基于ORDER BY子句返回第一个匹配行的相关子查询?我正在尝试从执行此操作的SQL Server转换查询.
为了记录,我需要坚持(大多数)SQL-92语法.根本不应该使用分析函数,我需要尽量减少使用非标准SQL. TOP 1 … ORDER BY是SQL Server专有的,我正在努力将其翻译成rownum.
注意:已经指出这个特定查询不需要TOP / LIMIT / rownum,因为它在语义上等效于使用Min(),因为我们只需要一列.但我仍然会欣赏并且会奖励任何有关如何执行翻译的帮助 – 因为我想更好地学习Oracle.
这是SQL Server查询(和SqlFiddle for it):
SELECT
D.StartDate,
(
SELECT TOP 1 E.EndDate
FROM dbo.Dates E
WHERE
E.EndDate >= D.EndDate
AND NOT EXISTS (
SELECT *
FROM dbo.Dates E2
WHERE
E.StartDate < E2.StartDate
AND E.EndDate > E2.StartDate
)
ORDER BY
E.EndDate,
E.StartDate DESC
) EndDate
FROM
dbo.Dates D
WHERE
NOT EXISTS (
SELECT *
FROM dbo.Dates D2
WHERE
D.StartDate < D2.EndDate
AND