选择行直到满足条件

时间:2014-03-06 17:55:35

标签: sql oracle

我想写一个Oracle查询,它返回一组特定的信息。使用下表,如果给定一个id,它将返回B的id和值。另外,如果B = T,它也将返回下一行。如果下一行有B = T,它将返回该行,依此类推,直到遇到F为止。

所以,给定3它只返回一行:(3,F)。给定4将返回3行:((4,T),(5,T),(6,F))

id B
1 F
2 F
3 F
4 T
5 T
6 F
7 T
8楼

提前谢谢!

1 个答案:

答案 0 :(得分:4)

使用子查询找出您应该停止的位置,然后将所有行从起点返回到计算的停止点。

SELECT
  *
FROM
  yourTable
WHERE
      id >= 4
  AND id <= (SELECT MIN(id) FROM yourTable WHERE b = 'F' AND id >= 4)

注意,这假定最后一条记录始终为'F'。您可以使用COALESCE处理最后一条记录“T”。

SELECT
  *
FROM
  yourTable
WHERE
      id >= 4
  AND id <= COALESCE(
              (SELECT MIN(id) FROM yourTable WHERE b = 'F' AND id >= 4),
              (SELECT MAX(id) FROM yourTable                          )
            )