我想知道是否有一种方法可以从空间数据列中查询最近的n个邻居,丢弃重复。
例如,我的查询看起来像这样:
SELECT TOP (@N) Point.STDistance(@Point) AS Distance
FROM MyTable
WHERE Point.STDistance(@Point) IS NOT NULL --For Spatial Index usage
ORDER BY Distance;
这几乎是有效的,但我的结果是:
Distance
3906,81969203873
3906,81969203873
5321,62614141754
5756,28719382942
我试图放置一个不同的子句,但是它不使用空间索引。
有什么想法?
谢谢
根据最近的邻居查询和空间索引,您需要在ORDER BY
子句中使用STDistance()
。
顺序中的第一个表达式必须使用stdistance()方法。
按顺序中的第一个stdistance()表达式按子句中的顺序必须为ASC。
您可能需要使用GROUP BY
或CTE
或subquery
来避免任何潜在的重复。
由于您的表设计或数据库设计,有递归记录。如果您共享数据库或表格架构可以更精确。使用内部选择的干净递归记录,然后应用距离功能以获得距离。它将使用空间索引。