Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

k निकटतम पड़ोसियों को खोजने के लिए मैं इस SQL ​​​​क्वेरी को कैसे बढ़ा सकता हूं?

क्या होता है अगर आप TOP (1) WITH TIES . को हटा देते हैं आंतरिक क्वेरी से, और बाहरी क्वेरी को शीर्ष पर वापस करने के लिए सेट करें k पंक्तियाँ?

मुझे यह जानने में भी दिलचस्पी होगी कि क्या यह संशोधन बिल्कुल मदद करता है। यह 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 - परीक्षण नहीं किया गया - मेरे पास यहाँ SQL 2008 तक पहुँच नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बेसिक pyodbc बल्क इंसर्ट

  2. SQL सर्वर में त्रुटि "डेटिफ़ फ़ंक्शन के परिणामस्वरूप अतिप्रवाह" को कैसे ठीक करें?

  3. SQL सर्वर में एक स्ट्रिंग से समय डेटा कैसे निकालें या कनवर्ट करें

  4. लिंक किए गए एमएस एक्सेस टेबल पर डालने के बाद SQL सर्वर अलग रिकॉर्ड देता है

  5. SQL सर्वर 2008 से बड़ी मात्रा में डेटा हटाना