如何在Oracle SQL中选择日期排序中的前1个?

21 浏览
0 Comments

如何在Oracle SQL中选择日期排序中的前1个?

这个问题在这里已经有了答案

如何在Oracle中选择前1个?[重复]

如何在Oracle查询中在排序后限制返回的行数?

Oracle选择前10条记录[重复]

如何正确使用Oracle ORDER BY和ROWNUM?

有一个明确的答案如何选择前1个

select * from table_name where rownum = 1

以及如何按日期降序排序:

select * from table_name order by trans_date desc

但它们不能一起使用(rownum不是按trans_date生成的):

... where rownum = 1 order by trans_date desc

问题是如何选择按日期排序的前1个?

admin 更改状态以发布 2023年5月23日
0
0 Comments

现代的Oracle版本有FETCH FIRST:\n

select * from table_name order by trans_date desc
fetch first 1 row only

0
0 Comments

... where rownum = 1 order by trans_date desc

这个语句随意选择一条记录(where rownum = 1),然后按照日期降序排序这条记录 (order by trans_date desc)。

正如Ivan所示,可以在子查询中对记录进行排序,然后使用外部查询中的 where rownum = 1 来保留第一条记录。然而,这种方式非常具有Oracle特定性,违反了SQL标准,因为子查询结果被认为是无序的(即order by子句可以被DBMS忽略)。

所以最好使用标准解决方案。从Oracle 12c开始:

select * 
from table_name 
order by trans_date desc
fetch first 1 row only;

在旧版本中:

select *
from
(
  select t.*, row_number() over (order by trans_date desc) as rn
  from table_name t
)
where rn = 1;

0