sql >> Databáze >  >> RDS >> Sqlserver

Jak najít hranice skupin souvislých pořadových čísel?

Jak bylo zmíněno v komentářích, jedná se o klasický problém s mezerami a ostrovy.

Řešením, které zpopularizoval Itzik Ben Gan, je použití skutečnosti, že ROW_NUMBER() OVER (ORDER BY number) - number zůstává konstantní v rámci „ostrova“ a nemůže se objevit na více ostrovech.

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) 

Poznámka:Pokud number není zaručeno, že je jedinečný, nahraďte ROW_NUMBER s DENSE_RANK v kódu výše.




  1. Jak zjistit, zda je vypočítaný sloupec deterministický na serveru SQL Server

  2. Smyčka SQL Server – jak mohu procházet sadou záznamů

  3. TCL příkazy v SQL

  4. Jak převést řetězec na malá písmena v SQL