如何在Oracle SQL中选择日期排序中的前1个?
如何在Oracle SQL中选择日期排序中的前1个?
这个问题在这里已经有了答案:
有一个明确的答案如何选择前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日
... 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;