sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan finder man grænserne for grupper af sammenhængende sekventielle tal?

Som nævnt i kommentarerne er dette et klassisk problem med huller og øer.

En løsning populariseret af Itzik Ben Gan er at bruge det faktum, at ROW_NUMBER() OVER (ORDER BY number) - number forbliver konstant inden for en "ø" og kan ikke vises på flere øer.

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:Hvis number er ikke garanteret at være unik, erstat ROW_NUMBER med DENSE_RANK i koden ovenfor.




  1. OPRET TABEL i SQL – Alt hvad du behøver at vide om at oprette tabeller i SQL

  2. Implementer MySQL relationelle databaser på Ubuntu 12.04 (præcis Pangolin)

  3. Oracle XML:Spring over Ikke eksisterer Node

  4. Hvordan angiver du et andet portnummer i SQL Management Studio?