你可以尝试使用
LEAD
和
LAG
窗口函数,计算哪些行是连续的1。
SELECT Val
FROM (
SELECT *,
LEAD(Val) OVER(ORDER BY Val) - Val gap1,
Tim Biegeleisen
发布于
2022-04-14
已采纳
0
人赞同
omega
:
如果数字不是从表中排序的,这还能工作吗?我看到你已经有一个
order by id
。这是否能处理好排序问题,还是我需要确保先进行排序?
@omega 你的表格中的数值没有实际的 "顺序"。 你似乎想让这个逻辑适用于升序排列的数字系列。 我的答案中
LEAD
和
LAG
中的
ORDER BY
子句就是这样假设的。
我们可以在这里使用
和
。
LEAD
LAG
WITH cte AS ( SELECT id, LAG(id) OVER (ORDER BY id) lag_id, LEAD(id) OVER (ORDER BY id) lead_id FROM yourTable SELECT id FROM cte WHERE lag_id <> id - 1 OR lead_id <> id + 1 ORDER BY id;