是否可以从 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')
)
)
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')
)
)