在SQL中从表中查找连续值
我想将一些sql表划分为多个范围 这张桌子必须分开在SQL中从表中查找连续值,sql,sql-server,gaps-and-islands,Sql,Sql Server,Gaps And Islands,我想将一些sql表划分为多个范围 这张桌子必须分开 Id num 0 1 0 2 2 2 2 5 结果是这样的, id,最小值,最大值 id min max 0 1 2 2 2 2 2 5 5 似乎您正试图在num中为id的不同值查找孤岛。这是一个相对常见的问题,因此您可以在中找到几个答案,以便处理岛屿问题 实现这一点的方法多种多样,但最简单的方法之一在以下章节的“正常岛”一节中进行了描述: 在每个孤岛内,num和densite_RANK
Id num
0 1
0 2
2 2
2 5
结果是这样的,
id,最小值,最大值
id min max
0 1 2
2 2 2
2 5 5
似乎您正试图在
num
中为id
的不同值查找孤岛。这是一个相对常见的问题,因此您可以在中找到几个答案,以便处理岛屿问题
实现这一点的方法多种多样,但最简单的方法之一在以下章节的“正常岛”一节中进行了描述:
在每个孤岛内,num
和densite_RANK
对于每个后续行都增加1,这意味着值num-densite_RANK
保持不变,可以用作孤岛标识符
在下一个岛上,densite\u RANK
仍将增加1,但num
将增加不同的数量,因此下一个岛将具有不同的岛id
一旦您有了岛标识符,您就可以按它分组并检索num的最小值和最大值
使用此脚本进行测试:
declare @islandtest table (Id int, num int);
insert into @islandtest values
(0,1),
(0,2),
(2,2),
(2,5);
WITH C AS
(
SELECT id,num, num - DENSE_RANK() OVER(ORDER BY id,num) AS grp
FROM @islandtest
)
SELECT id,MIN(num) AS rangestart, MAX(num) AS rangeend
FROM C
GROUP BY grp,id;
生成请求的输出:
id rangestart rangeend
----------- ----------- -----------
0 1 2
2 2 2
2 5 5
我看不出有什么逻辑,例如,id=0
有三个不同的范围。“sql”标记与“html表”有什么关系?@MaciejLos,我需要sql查询。这只是一个exmaple。单击“运行代码片段”以查看所需的@a_horse_和\u no_name的结果。我建议您重写该问题,以便正确呈现示例。现在,我们必须将HTML保存到一个文件中,在浏览器中打开它,才能看到您的示例。不要期望人们运行与SQL问题无关的HTML代码段
id rangestart rangeend
----------- ----------- -----------
0 1 2
2 2 2
2 5 5