Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Nummerierungsinseln in SQL Server 2012

Wenn Sie sie nur nummerieren möchten, würde ich lag() vorschlagen mit einer kumulierten Summe:

select t.*,
       sum(case when datefrom = dateadd(day, 1, prev_dateto
                then 0 else 1
           end) over (order by itemId, datefrom)
from (select t.*,
             lag(dateto) over (partition by itemid order by datefrom) as prev_dateto
      from table t
     ) t;

Der case bestimmt, wo eine neue Insel beginnt. Die kumulative Summe summiert einfach dieses Flag.