我正在处理的软件需要获取有序数据集的第一个和最后一个记录.数据集按日期列排序.
我有的数据:
--table "notes":
-- ordered by this
-- |
-- V
note_id date_created attribute1 attribute2 ... -- I want to get
-----------------------------------------------------
596 2014/01/20 ... ... ... -- <- this
468 2014/02/28 ... ... ...
324 2014/03/01 ... ... ...
532 2014/04/08 ... ... ...
465 2014/05/31 ... ... ... -- <- and this
Run Code Online (Sandbox Code Playgroud)
期望的输出:
596 2014/01/20 ... ... ...
465 2014/05/31 ... ... ...
Run Code Online (Sandbox Code Playgroud)
Gor*_*off 10
您可以使用窗口功能:
select t.*
from (select t.*, row_number() over (order by date_created) as seqnum,
count(*) over () as cnt
from t
) t
where seqnum = 1 or seqnum = cnt;
Run Code Online (Sandbox Code Playgroud)
在Oracle 12中,您还可以:
select t.*
from t
order by date_created
fetch first 1 rows only
union all
select t.*
from t
order by date_created desc
fetch first 1 rows only;
Run Code Online (Sandbox Code Playgroud)
如果我猜对了,请尝试以下操作:
select t1.*
from YOUR_TABLE t1
, (
select min(note_id) keep(dense_rank first order by date_created) min_val
, max(note_id) keep(dense_rank last order by date_created) max_val
from YOUR_TABLE
) t2
where t1.note_id = t2.min_val
or t1.note_id = t2.max_val
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12339 次 |
| 最近记录: |