Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak znaleźć granice grup ciągłych liczb sekwencyjnych?

Jak wspomniano w komentarzach, jest to klasyczny problem luk i wysp.

Rozwiązaniem spopularyzowanym przez Itzika Ben Gana jest wykorzystanie faktu, że ROW_NUMBER() OVER (ORDER BY number) - number pozostaje stały w obrębie „wyspy” i nie może pojawiać się na wielu wyspach.

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) 

Uwaga:Jeśli number nie ma gwarancji, że będzie unikalny, zastąp ROW_NUMBER z DENSE_RANK w powyższym kodzie.




  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 2016 — wprowadzenie do bazy danych Stretch

  2. Jak zainstalować sqlcmd i bcp w SUSE

  3. Jak uzyskać wartości kolumn tożsamości bez podawania nazwy kolumny tożsamości w Select — samouczek SQL Server/T-SQL, część 46

  4. HAS_DBACCESS() – Dowiedz się, czy użytkownik może uzyskać dostęp do bazy danych w SQL Server

  5. Jak stworzyć bazę danych w SQL Server