您好我在子列查询中使用了一个select子句,在几个列上执行Order后,我得到多行作为子查询的输出。 但我只需要从subquery返回的最后一条记录。我可以在主查询中处理它。
Select T.C1, T1.C4 as emp from
(Select C1,C4 from t1 group by C1,C4 order by c1,c2,c3 ) T
子查询返回
C1 C4
bal 1
Env 1
John 2
我需要的只是JOHN,2作为输出
答案 0 :(得分:2)
在您的情况下,最简单的方法是使用LAST(它没有很好命名)子句:
select max(c1) keep (dense_rank last order by c1, c2, c3) as c1
, max(c4) keep (dense_rank last order by c1, c2, c3) as c4
from t1
这将按照指定的顺序选择最后一条记录,并由您的聚合函数定义。 MAX只是一种感情; MIN会同样有效。
答案 1 :(得分:1)
我认为最简单的方法是使用带有子查询的rownum
。这需要撤消您的排序顺序:
Select T.C1, T1.C4 as emp
from (Select C1, C4
from t1
group by C1, C4
order by c1 desc, c2 desc, c3 desc
) T
where rownum = 1;
但请注意,您的查询在语法上是不正确的,因为您按非聚合列进行排序。