sql之识别整数范围并按它们的起点和终点对它们进行分组

tuyile006 阅读:72 2025-06-02 22:19:02 评论:0

假设我有一个包含一列 (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 

为了帮助您可视化这一点,子查询生成以下内容


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号