Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Групирайте близки числа

Това работи за вашия пример, уведомете ме, ако не работи за други данни

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при опит за избор на x редове от DB2 (V4R5M0) чрез сървър, свързан с sql сървър, използващ OPENQUERY

  2. Нулиране на началната стойност на самоличността след изтриване на записи в SQL Server

  3. Как да използвам структурни анотации, за да задам SQL тип на Дата в първия подход на модела

  4. Архитектура на SQL Server AlwaysOn (група за наличност) и инсталация стъпка по стъпка -3 Ръководство за отказ от стъпки

  5. Свързване към SQL Server от Nodejs