计算SQL Server中的最近邻

时间:2017-05-11 16:16:55

标签: sql-server sql-server-2012

我有2个数据集,消防栓(3381个记录)和街道中心线(6636个记录)。我想确定离每个消防栓记录最近的街道。

在一些SQL Server资源和教程之后,我整理了一个脚本,但它已经运行了一个多小时了。我理解最近的邻居可能需要一段时间才能运行,但似乎逻辑上可能存在错误。

select 

h.OBJECTID,
st.FULL_ST_NAME

from WATER_HYDRANTS as h LEFT OUTER JOIN
STREET_CENTERLINES as st

on st.Shape.STDistance(h.SHAPE) is NOT NULL
ORDER BY st.Shape.STDistance(h.SHAPE) ASC

我认为逻辑中存在错误的原因是因为当我添加WHERE子句以仅选择一个具有ID的记录时,查询将返回整个数据集的列表。在ObjectID列中,它具有相同的值(例如,13992),并且在FULL_ST_NAME列中(我假设)是按照与要素的接近度排序的每条街道的列表。

select      

h.OBJECTID,
st.FULL_ST_NAME

from WATER_HYDRANTS as h LEFT OUTER JOIN
STREET_CENTERLINES as st
on st.Shape.STDistance(h.SHAPE) is NOT NULL

where h.OBJECTID = '13992'

ORDER BY st.Shape.STDistance(h.SHAPE) ASC 

理想情况下,objectID列中的每条记录都是唯一的,而FULL_ST_NAME列的街道最接近每个消防栓。

如果我能提供任何其他信息,请告诉我。我试图在我的解释中做到彻底,并在进入SO之前尝试进行尽职调查和研究。

由于

0 个答案:

没有答案