Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tìm tất cả các khoảng trống số nguyên trong SQL

Ý tưởng là để xem các khoảng trống bắt đầu từ đâu. Hãy để tôi giả sử bạn đang sử dụng SQL Server 2012 và do đó có lag()lead() chức năng. Phần sau nhận được id tiếp theo :

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

Nếu có khoảng trống, thì nextid <> id+1 . Bây giờ bạn có thể mô tả các khoảng trống bằng cách sử dụng 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;

CHỈNH SỬA:

Không có lead() , Tôi sẽ làm điều tương tự với một truy vấn con tương quan:

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;

Giả sử id là một khóa chính trên bảng (hoặc thậm chí nó chỉ có một chỉ mục), cả hai phương pháp phải có hiệu suất hợp lý.



  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 2016:Tạo bảng từ tập lệnh SQL

  2. Làm thế nào để tham chiếu một CTE hai lần?

  3. T-SQL:Chọn cột dựa trên MAX (Cột khác)

  4. MS SSQL:Cách sử dụng trường hợp khi là tham số thực thi

  5. Lấy tên của một cột từ ID của nó trong SQL Server:COL_NAME ()