假设我有一个数据集,其中的一列(IDNUMBER)如下所示:
IDNUMBER
1
2
3
1001
1002
1003
1004
1005
理想情况下,我希望将此列中存在的所有数据分成两列,分别代表连续值的范围。
START, END
1, 3
1001, 1005
我可以使用游标或循环来执行此操作,但是是否存在基于集合的解决方案?
谢谢。
最佳答案
这是一个经典的差距与岛屿
示例
Select [Start] = min(IDNUMBER)
,[End] = max(IDNUMBER)
From (
Select *
,Grp = IDNUMBER - Row_Number() over (Order by IDNUMBER)
from YourTable
) A
Group By Grp
返回
Start End
1 3
1001 1005
为了使您形象化,子查询生成以下内容
关于sql - 确定整数范围并按其起点和终点分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45645230/