如何删除 select 语句中的所有连续数字?

How to remove all consecutive numbers in select statement?

如果我有一个 SQL 服务器查询 returns 数字顺序如下

1
2
3
5
6
7
9
10
11

如何删除数字,使相邻的两对不连续 1?以上应该像

一样返回
3
5
7
9

这可以吗?

我们可以在这里使用LEADLAG

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;

你可以尝试使用LEADLAGwindow函数,计算哪些行是连续的1。

SELECT Val
FROM (
 SELECT *,
       LEAD(Val) OVER(ORDER BY Val) - Val gap1,
       Val - LAG(Val) OVER(ORDER BY Val) gap2
 FROM T 
) t1
WHERE gap1 > 1 OR gap2 > 1