【问题标题】:subquery in oracle 10goracle 10g 中的子查询
【发布时间】:2014-11-04 11:53:32
【问题描述】:

我在 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 的列表,它以“A”以外的事件开头,例如 sid 4 和 5,因为这些会话以 B 和 C 开头。

更新:我已将事件缩写为 A、B、C,我的表中的实际事件是一个长字符串。

【问题讨论】:

    标签: sql oracle subquery correlated-subquery


    【解决方案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' 的所有此类行。

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 2011-03-11
      • 2013-10-31
      • 1970-01-01
      • 2011-07-14
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多