2014-11-04 107 views
0

我在Oracle 10g數據庫中的表有以下幾列子查詢在Oracle 10g

sdate     sid event 
31/10/2013 20:20:20  1  A  
31/10/2013 20:20:21  1  B 
31/10/2013 20:20:22  1  C 
31/10/2013 20:41:04  2  A  
31/10/2013 20:41:10  2  B 
31/10/2013 20:42:20  2  C  
31/10/2013 20:42:49  2  C 
31/10/2013 21:20:50  3  A 
31/10/2013 21:21:33  3  B 
31/10/2013 21:23:00  3  C 
31/10/2013 21:08:20  4  B  
31/10/2013 21:11:20  4  C 
31/10/2013 21:17:20  4  C 
31/10/2013 22:20:20  5  C 
31/10/2013 22:22:22  5  D 

SDATE是該記錄的日期, SID就像是一個會話ID,事件是一個會話中的獨特事件,例如A,B,C等。會話始終應始於事件「A」的一次發生。其他事件如B,C可以重複。

能有人請幫我寫一個查詢,會給我所有的SID的列表,這與例如SID 4和5比「A」之外的事件,因爲TESE會議與B和C.

做起

更新:我縮寫事件到A,B,C在我的表中的實際事件一個很長的字符串。

回答

1

您可以使用分析功能用於此目的:

select t.* 
from (select t.*, row_number() over (partition by sid order by sdate) as seqnum 
     from table t 
    ) t 
where seqnum = 1 and event <> 'A'; 

row_number()枚舉基礎上,date每個sid的事件。 where子句選擇事件不是'A'的第一個和所有這樣的行。