SQL Server查询最近邻居的空间数据DISTINCT TOP N ORDER BY Distance

时间:2017-03-09 11:36:04

标签: sql-server spatial nearest-neighbor

我想知道是否有办法从空间数据列中查询最近的N个邻居,丢弃重复项。

例如,我的查询如下所示:

ConstaintLayout

它非常有效,但我的结果是:

SELECT TOP (@N) Point.STDistance(@Point) AS Distance
FROM MyTable
WHERE Point.STDistance(@Point) IS NOT NULL --For Spatial Index usage
ORDER BY Distance;

我试图放置一个DISTINCT子句,但它没有使用空间索引。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

根据Nearest Neighbor Query and Spatial Indexes上的MSDN说明,您需要在STDistance()子句中使用ORDER BY

  
      
  1. ORDER BY子句中的第一个表达式必须使用STDistance()方法。

  2.   
  3. ORDER BY子句中第一个STDistance()表达式的排序顺序必须为ASC。

  4.   

您可能需要使用GROUP BYCTEsubquery来避免任何可能的重复。

答案 1 :(得分:-2)

由于您的表格设计或数据库设计,存在递归记录。如果您共享数据库或表模式可以更准确地回答。使用内部选择干净递归记录然后应用距离函数来获得距离。它将使用空间索引。