Sql Oracle中最后一次出现
我在Oracle中有下表:Sql Oracle中最后一次出现,sql,database,oracle,Sql,Database,Oracle,我在Oracle中有下表: ID Start End AAAAA 20/08/1999 22:12 21/08/1999 00:50 AAAAA 20/08/1999 23:40 21/08/1999 00:51 BBBBB 20/08/1999 20:40 21/08/1999 00:53 AAAAA 21/08/1999 00:51 21/08/1999 01:16 AAAAA 21/08/1
ID Start End
AAAAA 20/08/1999 22:12 21/08/1999 00:50
AAAAA 20/08/1999 23:40 21/08/1999 00:51
BBBBB 20/08/1999 20:40 21/08/1999 00:53
AAAAA 21/08/1999 00:51 21/08/1999 01:16
AAAAA 21/08/1999 00:50 21/08/1999 01:20
BBBBB 20/08/1999 21:42 22/08/1999 00:53
我正试图得到这个输出
VALUE TIMESTAMP
AAAAA 20/08/1999 22:12
0 21/08/1999 01:20
BBBBB 20/08/1999 20:40
0 22/08/1999 00:53
ID与每个ID的第一次开始匹配,0与每个ID的最后一次结束匹配
第一次使用rownum=1,但找不到选择最后一次的方法。我尝试使用COUNT(*),但效果不好。有人能帮我吗
迄今为止的代码:
--FIRST ROW ONLY
select a.Start TIMESTAMP,
a.ID VALUE
from MyTable a
WHERE rownum = 1
--END FIRST COLUMN
union all
--LAST ROW COLUMN
select a.End TIMESTAMP,
'0' VALUE
from MyTable a
--where ???????
非常感谢 这是一个奇怪的输出。您可以使用分析函数获得它:
select VALUE, TIMESTAMP
from (
select min(a.Start) TIMESTAMP,
a.ID VALUE,
a.ID,
1 ORD
from MyTable a
group by a.ID
union all
select max(a.End) TIMESTAMP,
'0' VALUE,
a.ID,
2 ORD
from MyTable a
group by a.ID
)
order by ID, ORD
select (case when seqnum = 1 then id else '0' end) as id,
(case when seqnum = 1 then start else "end" end) as timestamp
from (select t.*,
row_number() over (partition by id order by start) as seqnum,
count(*) over (partition by id) as cnt
from table t
) t
where seqnum = 1 or seqnum = cnt;