我会在一个稍微不同的方式解决这个问题。你基本上在寻找没有其他迭代大于它的那一行。至少有3种方式我能想到的要做到这一点:
SELECT
T1.iteration AS maxiteration,
T1.column
FROM
Table T1
WHERE
T1.id = 223652 AND
NOT EXISTS
(
SELECT *
FROM Table T2
WHERE
T2.id = 223652 AND
T2.iteration > T1.iteration
)
或者......
SELECT
T1.iteration AS maxiteration,
T1.column
FROM
Table T1
LEFT OUTER JOIN Table T2 ON
T2.id = T1.id AND
T2.iteration > T1.iteration
WHERE
T1.id = 223652 AND
T2.id IS NULL
或者......
SELECT
T1.iteration AS maxiteration,
T1.column
FROM
Table T1
INNER JOIN (SELECT id, MAX(iteration) AS maxiteration FROM Table T2 GROUP BY id) SQ ON
SQ.id = T1.id AND
SQ.maxiteration = T1.iteration
WHERE
T1.id = 223652
编辑:我没有”在第一次读取问题时不会看到ORA错误,并且它没有被标记为特定于Oracle。我认为Oracle中的别名的语法和用法可能存在一些差异,因此您可能需要调整一些上述查询。
Oracle错误告诉你它不知道什么是最大化,因为列别名在子查询中还不可用。您需要通过表别名和列名称来引用它,而不是我相信的列别名。确保在Oracle语法
你能后的完整的错误信息? – csl 2011-05-26 13:45:27
非常惊人的回复,谢谢你们! – Nick 2011-05-26 15:16:08