如何在Oracle中提取最后一条记录

时间:2013-09-08 11:36:03

标签: sql oracle

您好我在子列查询中使用了一个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作为输出

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

我建议Rob van Wijk's article

答案 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;

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