Sql 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

我在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/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;