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

Bagaimana cara menemukan batas kelompok bilangan urut yang bersebelahan?

Seperti yang disebutkan dalam komentar, ini adalah masalah kesenjangan dan pulau klasik.

Solusi yang dipopulerkan oleh Itzik Ben Gan adalah dengan menggunakan fakta bahwa ROW_NUMBER() OVER (ORDER BY number) - number tetap konstan dalam "pulau" dan tidak dapat muncul di banyak pulau.

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:Jika number tidak dijamin unik menggantikan ROW_NUMBER dengan DENSE_RANK pada kode di atas.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa memasukkan data file biner ke dalam bidang SQL biner menggunakan pernyataan penyisipan sederhana?

  2. Fungsi COALESCE di TSQL

  3. Kesalahan:Pernyataan INSERT EXEC tidak dapat disarangkan. dan Tidak dapat menggunakan pernyataan ROLLBACK dalam pernyataan INSERT-EXEC. Bagaimana cara mengatasi ini?

  4. Cara menggunakan Top with Ties di SQL Server - Tutorial SQL Server / TSQL Bagian 114

  5. Tidak dapat terhubung ke SQL Server dengan PHP