1

嗨,在对几列进行排序后,我在子查询中使用了一个选择子句,我得到多行作为子查询的输出。但我只需要从子查询返回的最后一条记录。这样我就可以在主查询中处理它。

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 作为输出

4

2 回答 2

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 也同样有效。

我会推荐Rob van Wijk 的文章

于 2013-09-08T11:38:24.987 回答
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;

但是,我确实注意到您的查询在语法上不正确,因为您是按非聚合列排序的。

于 2013-09-08T12:32:27.443 回答