sql >> Databasteknik >  >> RDS >> Sqlserver

Hur hittar man gränserna för grupper av sammanhängande sekventiella tal?

Som nämnts i kommentarerna är detta ett klassiskt problem med luckor och öar.

En lösning som populariserats av Itzik Ben Gan är att använda det faktum att ROW_NUMBER() OVER (ORDER BY number) - number förblir konstant inom en "ö" och kan inte visas på flera öar.

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) 

OBS:Om number är inte garanterat unik ersätt ROW_NUMBER med DENSE_RANK i koden ovan.




  1. Fel 28000:Inloggning misslyckades för användaren DOMAIN\\user med pyodbc

  2. Hur anropar jag en lagrad procedur med argument med sqlcmd.exe?

  3. Flera databasanslutning i Rails

  4. Bestämma OID för en tabell i Postgres 9.1?