Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中从表中查找连续值_Sql_Sql Server_Gaps And Islands - Fatal编程技术网

在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

我想将一些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
对于每个后续行都增加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