是否可以从 DB2(或任何其他 sql)查询中有选择地获取行,如下所示?

Is it possible from a DB2 (or any other sql) query to fetch rows selectively as shown below?

TIME STATUS  
9:00 Success  
8:00 Success  
7:00 Fail  
6:00 Fail  
5:00 Fail  
4:00 Success  
3:30 Fail
3:00 Success
...  ...

table 包含大量记录。 TIME 列实际上是一个时间戳,但为了简单起见,我只是提供了 h:mm 格式。

我的要求是,当 table 中的数据按时间降序排列时,获取其 STATUS 列值介于两个 'Success' 值之间的所有记录的第一组。

所以在上面的例子中,查询应该获取 3,4,5 条记录。即

TIME STATUS
7:00 Fail  
6:00 Fail  
5:00 Fail  

另一个例子:

TIME STATUS  
9:00 Success  
8:00 Success  
7:00 Success  
6:00 Fail  
5:00 Fail  
4:00 Fail  
3:30 Fail
3:00 Success
2:30 Fail
2:15 Fail
2:12 Fail
2:00 Success
...  ...

在上述情况下,查询应获取 4、5、6、7 条记录,这是位于两个 'Success' 之间的第一组“失败”。即,

TIME STATUS
6:00 Fail  
5:00 Fail  
4:00 Fail  
3:30 Fail

首先你应该在table中找到第一次失败的时间。那么你应该 select 每个 FAIL 都比第一个早,并且 table.

中从当前到第一个 FAIL 没有任何 SUCCESS 行

这里是标准查询 SQL:

SELECT * FROM T AS T1 
  WHERE STATUS='fail'
    AND NOT EXISTS (SELECT * FROM T 
                       WHERE STATUS='Success'
                             AND TIME>T1.TIME 
                             AND TIME<=
                              (
                                SELECT TIME FROM T as T2
                                       WHERE STATUS='fail'
                                       AND NOT EXISTS (SELECT * FROM T 
                                                         WHERE TIME>T2.TIME 
                                                            AND STATUS='Fail')

                              )
                     ) 

SQLFiddle demo