问题描述
|
希望标题具有某种意义-我基本上想根据原始选择中的值进行嵌套选择,如下所示:
SELECT MAX(iteration) AS maxiteration,(SELECT column
FROM table
WHERE id = 223652
AND iteration = maxiteration)
FROM table
WHERE id = 223652;
我收到ORA-00904无效标识符错误。
非常感谢有关如何返回此值的任何建议,谢谢!
解决方法
看起来应该用where子句重写:
select iteration,col
from tbl
where id = 223652
and iteration = (select max(iteration) from tbl where id = 223652);
,您可以将子选择放置在其自身的一个“ 2”中,从而共同解决该问题。
SELECT t.iteration,t.column
FROM table t
INNER JOIN (
SELECT id,MAX(iteration) AS iteration
FROM table
WHERE id = 223652
) tm ON tm.id = t.id AND tm.iteration = t.iteration
,由于您使用的是Oracle,因此建议您使用分析功能:
SELECT * FROM (
SELECT col,iteration,row_number() over (partition by id order by iteration desc) rn
FROM tab
WHERE id = 223652
) WHERE rn = 1
,像这样做:
with maxiteration as
(
SELECT MAX(iteration) AS maxiteration
FROM table
WHERE id = 223652
)
select
column,iteration
from
table
where
id = 223652
AND iteration = maxiteration
;
,无法100%确定Oracle语法,但不是这样的:
select iteration,column from table where id = 223652 order by iteration desc limit 1
,我将以略有不同的方式解决此问题。您基本上是在寻找没有其他迭代大于该行的行。我至少可以想到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错误告诉您它不知道什么是最大化,因为在子查询中列别名尚不可用。您需要通过表别名和列名而不是我相信的列别名来引用它。
,你做类似的事情
select maxiteration,column from table a join (select max(iteration) as maxiteration from table where id=1) b using (id) where b.maxiteration=a.iteration;
当然,这可能会返回一个最大化的多行,除非您的表对此有约束。