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

Bagaimana saya bisa memperluas kueri SQL ini untuk menemukan k tetangga terdekat?

Apa yang terjadi jika Anda menghapus TOP (1) WITH TIES dari kueri dalam, dan atur kueri luar untuk mengembalikan k . teratas baris?

Saya juga tertarik untuk mengetahui apakah amandemen ini membantu. Seharusnya lebih efisien daripada menggunakan TOP :

DECLARE @start FLOAT = 1000
        ,@k INT = 20
        ,@p FLOAT = 2;

WITH NearestPoints AS
(
     SELECT *
            ,T.g.STDistance(@x) AS dist
            ,ROW_NUMBER() OVER (ORDER BY T.g.STDistance(@x)) AS rn
     FROM Numbers 
     JOIN T WITH(INDEX(spatial_index)) 
     ON   T.g.STDistance(@x) <  @start*POWER(@p,Numbers.n)
     AND (Numbers.n - 1 = 0 
          OR T.g.STDistance(@x) >= @start*POWER(@p,Numbers.n - 1)
         )
)
SELECT * 
FROM NearestPoints
WHERE rn <= @k;

NB - belum diuji - Saya tidak memiliki akses ke SQL 2008 di sini.



  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 cara memeriksa apakah objek DateTime tidak ditetapkan?

  2. Dapatkan jumlah item dan nilainya dalam satu kolom

  3. SQL Query dengan NOT LIKE IN

  4. Apa yang dimaksud dengan kunci baris, halaman, dan tabel? Dan kapan mereka diakuisisi?

  5. Penyedia OLE DB Microsoft.ACE.OLEDB.12.0 untuk server tertaut (null) pesan yang dikembalikan Bookmark tidak valid.