sql >> Database >  >> RDS >> Sqlserver

Nummeringseilanden in SQL Server 2012

Als je ze gewoon wilt nummeren, raad ik je aan lag() met een cumulatieve som:

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;

De case bepaalt waar een nieuw eiland begint. De cumulatieve som somt deze vlag op.



  1. Oracle SQL volledige hiërarchie gegeven elk knooppunt als invoer

  2. Query op datetime-velden met milliseconden geeft verkeerd resultaat in SQL Server

  3. Alternatief voor Cartesiaans en Cross Join

  4. Aanbevolen manier/volgorde om gegevens van een webservice te lezen, die gegevens te ontleden en in een SQLite-database in te voegen