Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Намерете всички пропуски в цели числа в SQL

Идеята е да се погледне откъде започват пропуските. Нека приемя, че използвате SQL Server 2012, както и lag() и lead() функции. Следното получава следващия id :

select t.*, lead(id) over (order by id) as nextid
from t;

Ако има пропуск, тогава nextid <> id+1 . Вече можете да охарактеризирате пропуските с помощта на where :

select id+1 as FirstMissingId, nextid - 1 as LastMissingId
from (select t.*, lead(id) over (order by id) as nextid
      from t
     ) t
where nextid <> id+1;

РЕДАКТИРАНЕ:

Без lead() , бих направил същото със свързана подзаявка:

select id+1 as FirstMissingId, nextid - 1 as LastMissingId
from (select t.*,
             (select top 1 id
              from t t2
              where t2.id > t.id
              order by t2.id
             ) as nextid
      from t
     ) t
where nextid <> id+1;

Приемане на id е първичен ключ в таблицата (или дори че има само индекс), и двата метода трябва да имат разумна производителност.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кой е най-бързият начин за групово вмъкване на много данни в SQL Server (C# клиент)

  2. Сума от разликата DateTime в sql (HH.MM)

  3. Разделете един дълъг низ със запетая в многоколонна нова таблица

  4. SQL Server:конвертирайте ((int)година,(int)месец,(int)ден) в дата и час

  5. Как да използвате сортиране (Поръчайте по) в Select Statement в SQL Server - SQL Server / TSQL Урок, част 109