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

Làm thế nào để tìm ranh giới của các nhóm số liên tiếp liền nhau?

Như đã đề cập trong các bình luận, đây là một vấn đề về khoảng cách và đảo cổ điển.

Một giải pháp được Itzik Ben Gan phổ biến là sử dụng thực tế là ROW_NUMBER() OVER (ORDER BY number) - number không đổi trong một "đảo" và không thể xuất hiện ở nhiều đảo.

WITH T
     AS (SELECT ROW_NUMBER() OVER (ORDER BY number) - number AS Grp,
                number
         FROM   mytable
         WHERE  status = 0)
SELECT MIN(number) AS [From],
       MAX(number) AS [To]
FROM   T
GROUP  BY Grp
ORDER  BY MIN(number) 

NB:If number không được đảm bảo là duy nhất thay thế ROW_NUMBER với DENSE_RANK trong đoạn mã trên.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để kết nối với cơ sở dữ liệu bên ngoài từ câu lệnh sql hoặc thủ tục được lưu trữ?

  2. Nhập / Xuất cơ sở dữ liệu với SQL Server Management Studio

  3. Cách kiểm tra xem một cột được tính toán có "Cố định" trong SQL Server hay không

  4. Báo cáo Dữ liệu Hiệu suất SQLDIAG qua Công cụ Tiện ích RML | Khắc phục sự cố hiệu suất máy chủ SQL -7

  5. Cập nhật cột đếm từ dữ liệu trong bảng khác