遍历整个表,并将满足内部查询的所有值传递给外部查询

Kku*_*ara 1 sql oracle plsql oracle10g oracle11g

--Pass each of the pmi value from the below query to an outer query.
select pmi 
from support
where supportid = (select supportid 
                   from support 
                   where pmi = '123'
                   order by datereceived DESC
                   fetch first 1 row only)
  and reason ='XYZ'
Run Code Online (Sandbox Code Playgroud)

我有一个特别的多排pmi在我的表support。对于每组pmi,我需要使用该datereceived列查找最新行,然后检查该最新行是否有“XYZ”原因。

仅当原因是最新行中的“XYZ”时,我才必须将该pmi值传递给外部查询。

如果我将 a 硬编码pmi到内部查询中,它会起作用,但我希望内部查询遍历pmi表中的所有内容。

任何帮助,将不胜感激。

Tho*_*ner 5

您根本不需要子查询。只需按 pmi 聚合并用于KEEP LAST检查最后一行的原因是否为 XYZ:

select pmi
from support
group by pmi
having max(reason) keep (dense_rank last order by datereceived) = 'XYZ';
Run Code Online (Sandbox Code Playgroud)

KEEP LAST不过是 Oracle 专有的。如果您想要更接近您自己的查询(并且符合标准),您可以使用:

select pmi 
from support
where (pmi, datereceived) in
(
  select pmi, max(datereceived)
  from support 
  group by pmi
)
and reason = 'XYZ';
Run Code Online (Sandbox Code Playgroud)