Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Temukan semua celah bilangan bulat dalam SQL

Idenya adalah untuk melihat di mana kesenjangan dimulai. Biarkan saya berasumsi Anda menggunakan SQL Server 2012, dan memiliki lag() dan lead() fungsi. Berikut ini mendapatkan id berikutnya :

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

Jika ada celah, maka nextid <> id+1 . Anda sekarang dapat mengkarakterisasi kesenjangan menggunakan 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;

EDIT:

Tanpa lead() , saya akan melakukan hal yang sama dengan subquery yang berkorelasi:

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;

Dengan asumsi id adalah kunci utama pada tabel (atau bahkan hanya memiliki indeks), kedua metode harus memiliki kinerja yang wajar.



  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 memblokir akses ke prosedur 'sys.sp_OACreate' dari komponen 'Ole Automation Procedures'

  2. Sintaks salah di dekat ''

  3. Bandingkan string yang dipisahkan koma dalam SQL

  4. cara menghitung jumlah hari dalam setahun di sql server 2008

  5. Cara Menambahkan Kolom identitas ke Tabel oleh TSQL dan GUI di SQL Server - Tutorial SQL Server / T-SQL Bagian 40