2014-11-04 90 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'的第一个和所有这样的行。