有一个明确的答案如何选择前1:
select * from table_name where rownum = 1
Run Code Online (Sandbox Code Playgroud)
以及如何按日期降序排序:
select * from table_name order by trans_date desc
Run Code Online (Sandbox Code Playgroud)
但它们不起作用(rownum不是根据trans_date)生成的:
... where rownum = 1 order by trans_date desc
Run Code Online (Sandbox Code Playgroud)
问题是如何选择按日期排序的前1名?
Tho*_*ner 21
... where rownum = 1 order by trans_date desc
Run Code Online (Sandbox Code Playgroud)
这将选择一个任意选择的记录(where rownum = 1),然后对这一个记录(order by trans_date desc)进行排序.
如Ivan所示,您可以使用子查询来订购记录,然后where rownum = 1在外部查询中保留第一条记录.但是,这是特定于Oracle的,并且违反了SQL标准,其中子查询结果被认为是无序的(即DBMS可以忽略order by子句).
所以最好采用标准解决方案.从Oracle 12c开始:
select *
from table_name
order by trans_date desc
fetch first 1 row only;
Run Code Online (Sandbox Code Playgroud)
在旧版本中:
select *
from
(
select t.*, row_number() over (order by trans_date desc) as rn
from table_name t
)
where rn = 1;
Run Code Online (Sandbox Code Playgroud)
现代 Oracle 版本有FETCH FIRST:
select * from table_name order by trans_date desc
fetch first 1 row only
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46079 次 |
| 最近记录: |