Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Numerowanie wysp w SQL Server 2012

Jeśli chcesz je po prostu ponumerować, sugerowałbym lag() z sumą skumulowaną:

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;

case określa, gdzie zaczyna się nowa wyspa. Łączna suma po prostu sumuje tę flagę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieoczekiwany typ zmiennej zwrócony przez Receive-Job

  2. Jak obcinać wszystkie tabele w bazie danych za pomocą TSQL?

  3. Jak wysyłać zapytania o wiersze, które mają najwyższą wartość kolumny spośród wierszy, które mają taką samą wartość dla jednej z kolumn?

  4. Jak rozpoznać, które tabele zajmują najwięcej miejsca w bazie danych SQL Server 2005?

  5. Jak uzyskać listę wszystkich języków w SQL Server (T-SQL)