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

Как да намеря границите на групи от последователни последователни числа?

Както бе споменато в коментарите, това е класически проблем с пропуските и островите.

Решение, популяризирано от Ицик Бен Ган, е да се използва фактът, че ROW_NUMBER() OVER (ORDER BY number) - number остава постоянен в рамките на "остров" и не може да се появи в множество острови.

WITH T
     AS (SELECT ROW_NUMBER() OVER (ORDER BY number) - number AS Grp,
                number
         FROM   mytable
         WHERE  status = 0)
SELECT MIN(number) AS [From],
       MAX(number) AS [To]
FROM   T
GROUP  BY Grp
ORDER  BY MIN(number) 

NB:Ако number не е гарантирано, че е уникален замяна на ROW_NUMBER с DENSE_RANK в кода по-горе.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какъв е най-добрият начин да тествате програмно връзката със SQL Server?

  2. Ред, разделен със запетая, с клауза Group By

  3. Разпределена транзакция на свързан сървър между sql сървър и mysql

  4. Напишете число с две десетични знака SQL Server

  5. Как да създадете множество едно към едно