从oracle表中选择最近记录中的多个字段

时间:2015-03-16 21:05:09

标签: sql oracle greatest-n-per-group

我想做这样的事情:

select MAX(field1), field2 from tbl1 group by field1

但上面的查询并不起作用(sqlplus抛出错误)。如何在单个查询中实现上述目标(目前,我已将其拆分为两个查询以获得结果)。

2 个答案:

答案 0 :(得分:2)

您可以在其中使用内联视图和分析函数(max() over())来选择时间戳最大的行:

select field1, field2 from 
    (select field1, field2, max(field1) over() as max_field1
     from tbl1)
where field1 = max_field1;

请注意,如果有许多记录的时间戳值为max_field1,则会返回它们(按任意顺序)。

答案 1 :(得分:2)

在Oracle 12中,您可以使用:

select t.*
from tbl1
order by field1 desc
fetch first 1 row only;

早期版本需要具有相同功能的子查询:

select t.*
from (select t.*
      from tbl1
      order by field1 desc
     ) t
where rownum = 1;

请注意,如果max在多行中,则答案答案可以返回多行。你的问题不清楚是否可取。这些版本只返回一行。