saw*_*per 2 sql-server gaps-and-islands
我在行中有以下数据:
1
2
3
6
7
15
16
Run Code Online (Sandbox Code Playgroud)
我想写一个SELECT
语句来返回连续的范围。鉴于上面的示例数据,输出将是:
1,2,3
6,7
15,16
Run Code Online (Sandbox Code Playgroud)
Pau*_*ite 10
给定以下示例数据:
DECLARE @Data AS table
(
data integer PRIMARY KEY
);
INSERT @Data
(data)
VALUES
(1),
(2),
(3),
(6),
(7),
(15),
(16);
Run Code Online (Sandbox Code Playgroud)
实现您所追求的结果的一种方法是:
WITH Grouped AS
(
-- Identify groups
SELECT
D.data,
grp = D.data - ROW_NUMBER()
OVER (ORDER BY D.data)
FROM @Data AS D
)
SELECT
STUFF
(
(
-- Concatenate items in the current group
SELECT
[text()] = ',' + CONVERT(varchar(11), G2.data)
FROM Grouped AS G2
WHERE
G2.grp = Grouped.grp
ORDER BY
G2.data
FOR XML PATH ('')
)
-- Remove initial comma
, 1, 1, ''
)
FROM Grouped
GROUP BY
Grouped.grp;
Run Code Online (Sandbox Code Playgroud)
测试在 SQLfiddle
归档时间: |
|
查看次数: |
488 次 |
最近记录: |