Group close numbers

后端 未结 3 1471
粉色の甜心
粉色の甜心 2021-02-08 08:49

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    2         


        
3条回答
  •  甜味超标
    2021-02-08 09:35

    This works for your example, let me know if it doesn't work for other data

    create table #Range 
    (
      [Start] INT,
      [End] INT
    )
    
    insert into #Range ([Start], [End]) Values (1, 8)
    insert into #Range ([Start], [End]) Values (9, 13)
    insert into #Range ([Start], [End]) Values (14, 20)
    insert into #Range ([Start], [End]) Values (20, 25)
    insert into #Range ([Start], [End]) Values (30, 42)
    insert into #Range ([Start], [End]) Values (42, 49)
    insert into #Range ([Start], [End]) Values (60, 67)
    
    
    
    ;with RangeTable as
    (select
        t1.[Start],
        t1.[End],
        row_number() over (order by t1.[Start]) as [Index]
    from
        #Range t1
    where t1.Start not in (select 
                          [End] 
                   from
                      #Range
                      Union
                   select 
                      [End] + 1
                   from
                      #Range
                   )
    )
    select 
        t1.[Start],
        case 
       when t2.[Start] is null then
            (select max([End])
                         from #Range)
           else
            (select max([End])
                         from #Range
                         where t2.[Start] > [End])
    end as [End]    
    from 
        RangeTable t1
    left join 
        RangeTable t2
    on
        t1.[Index] = t2.[Index]-1 
    
    drop table #Range;
    

提交回复
热议问题