选择行直到遇到条件



我想编写一个返回特定信息集的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 f

预先感谢您!

使用子查询来找出您应该在什么时候停止,然后将所有行从您的起点返回到计算的停止点。

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

最新更新