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


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

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

我的要求是获取所有记录中的第一组,这些记录的 STATUS 列值位于两个"成功"值之间,当表中的数据按时间降序排序时,如图所示。

因此,在上述情况下,查询应获取 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 条记录,这是位于两个"成功"之间的第一组"失败"。

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

首先,您应该在表中找到第一个 FAIL 时间。然后,您应该选择早于第一个 FAIL 的每个 FAIL,并且表中的当前和第一个 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

最新更新