假设我有一个数据集,其中的一列(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 - 确定整数范围并按其起点和终点分组-LMLPHP

关于sql - 确定整数范围并按其起点和终点分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45645230/

10-10 05:29