您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何扩展此SQL查询以找到k个最近的邻居?

如何扩展此SQL查询以找到k个最近的邻居?

如果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;

注意:未经测试-我无法在此处访问sql 2008。

SQLServer 2022/1/1 18:39:02 有575人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶