给出下表示例:
+-----------+
| Id | Name |
+----+------+
| 1 | A |
| 2 | B |
| 3 | B |
| 4 | C |
| 5 | A |
| 6 | B |
| 7 | B |
| 8 | B |
| 9 | B |
| 10 | X |
+----+------+
我希望通过查询获得以下结果:
+----+------+
| 6 | B |
| 7 | B |
| 8 | B |
| 9 | B |
+----+------+
我能做的最好的查询是:
SELECT * FROM
(SELECT id, name, LEAD(id) OVER (ORDER BY id) t
FROM test WHERE name = 'B' ORDER BY id)
WHERE ID <> t-1;
在这里摆弄
1条答案
按热度按时间nukf8bse1#
如果需要长度和起始位置:
可以联接回表以获取原始行。
另一种方法是使用窗口函数来计算给定行后的非B数。然后选择第一个:
这是一把小提琴。