如何删除 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
这可以吗?
我们可以在这里使用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;
你可以尝试使用LEAD
和LAG
window函数,计算哪些行是连续的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
如果我有一个 SQL 服务器查询 returns 数字顺序如下
1
2
3
5
6
7
9
10
11
如何删除数字,使相邻的两对不连续 1?以上应该像
一样返回3
5
7
9
这可以吗?
我们可以在这里使用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;
你可以尝试使用LEAD
和LAG
window函数,计算哪些行是连续的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