组接近数字
我有一个包含 2 列整数的表。第一列表示开始索引,第二列表示结束索引。
START END
1 8
9 13
14 20
20 25
30 42
42 49
60 67
到目前为止很简单。我想要做的是将后面的所有记录分组在一起:
START END
1 25
30 49
60 67
一条记录可以从与前一个结束索引相同的索引开始或边距为 1:
START END
1 10
10 20
并且
START END
1 10
11 20
两者都会导致
START END
1 20
我使用 SQL Server 2008 R2 。
任何帮助都会很棒
I have a table with 2 columns of integers. The first column represents start index and the second column represents end index.
START END
1 8
9 13
14 20
20 25
30 42
42 49
60 67
Simple So far. What I would like to do is group all the records that follow together:
START END
1 25
30 49
60 67
A record can follow by Starting on the same index as the previous end index or by a margin of 1:
START END
1 10
10 20
And
START END
1 10
11 20
will both result in
START END
1 20
I'm using SQL Server 2008 R2.
Any help would be Great
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这适用于您的示例,如果它不适用于其他数据,请告诉我
This works for your example, let me know if it doesn't work for other data
编辑以包含另一个版本,我认为该版本更可靠,并且也适用于重叠范围
我认为这应该有效 - 但在较大的集合上可能不是特别有效......
Edited to include another version which i think is a bit more reliable, and also works with overlapping ranges
I think this should work - might not be especially efficient on larger sets though...
您可以使用 数字表来解决这个问题。基本上,您首先扩展范围,然后将后续项目分组。
这是一种实现:
该解决方案使用
master..spt_values
作为数字表,用于扩展初始范围。但是,如果(全部或部分)这些范围可能跨越超过 2048 个(后续)值,那么您应该定义并使用 您自己的数字表。You could use a number table to solve this problem. Basically, you first expand the ranges, then combine subsequent items in groups.
Here's one implementation:
This solution uses
master..spt_values
as a number table, for expanding the initial ranges. But if (all or some of) those ranges may span more than 2048 (subsequent) values, then you should define and use your own number table.