2014-01-26 47 views
0

我在甲骨文如下表:末發生在甲骨文

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 ??????? 

提前非常感謝!

回答

1
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 
1

這是一個奇怪的輸出。您可以使用分析功能得到它:

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;