2011-05-06 70 views
0

早上好,查询数据集采用纬度/经度功能

我工作的工作项目,并在很有点陷入僵局获得距离。我想要做的是取一条记录列表(记录包含商店的邮编,纬度和经度),并将它们放入最近的市场。

我有一个功能,将比较2个邮编及其相关的经度和纬度,并获得距离。当输入1中的记录时,该功能可以正常工作。

我想要做的是找出一种方法来让函数一次通过给定记录1,并给我距离。

我目前拥有的是:

声明@i诠释
从#unmatched2
选择@i =分钟(行ID)宣布@Max诠释
从#unmatched2选择@Max = MAX(行ID)而@i < = @Max 开始
选择邮编,经度,由#unmatched2其中行ID = @i

DECLARE @Lat1 float 
DECLARE @Long1 float 
DECLARE @Lat2 float 
DECLARE @Long2 float 

SELECT @Lat1 = max(Latitude) from #unmatched2 
where RowID = @i 
SELECT @Long1 = max(Longitude) from #unmatched2 
where RowID = @i 
SELECT @Lat2 = max(Latitude) from ProgramManagement.dbo.zipcode_lookup 
where ZIPCode = 92101 
SELECT @Long2 = max(Longitude) from ProgramManagement.dbo.zipcode_lookup 
where ZIPCode = 92101 
select ProgramManagement.dbo.CoordinateDistanceMiles(@Lat1, @Long1, @Lat2, @Long2) 
set @i = @i + 1 end 

@d纬度atabase是我用来获取rowcount的临时表。例如在这种情况下,我正在使用#unmatched。

样品记录是:

Zipcode, latitude , longitude 
92101 , 32.7152778, -117.1563889 

输出将仅仅是在距离单号:

140.01 

所以临时表将具有〜1300个记录和输出将是一个单每行的编号。

目前上述工作正在进行,它贯穿整个表格,但是我的输出结果出来了。第1是:

Zipcode Longitude Latitude 
93510 -118.1824020000 34.4679410000 

的第二点是:

Distance 
134.035921098023 

我需要发生的只是一个结果1至年底,而不是什么我目前得到的名单。有什么建议么?或者是有结果是一个办法:我想,你只是试图找到在zipcode_lookup表中的一条记录每条记录在您的#unmatched2表的距离

Zipcode  Longitude  Latitude  Distance 
93510  118.1824020000 34.4679410000 134.035921.. 
+0

什么是'@ databases' ?它是否包含经度和纬度?您可以请发布一些示例数据和期望的查询输出? – Quassnoi 2011-05-06 15:05:35

+0

@database是我用来获取rowcount的临时表。例如在这种情况下,我正在使用#unmatched。 样品记录是: 邮政编码,纬度,经度 92101,32.7152778,-117.1563889 输出将仅仅是在距离单号: 140.01 所以临时表将具有〜1300个记录并输出将是每行的单个数字。 – Randal 2011-05-06 15:08:53

回答

0

。为此设置的逻辑是一个简单的连接,然后在select中执行距离计算。

SELECT u.RowID, u.Zipcode, u.Longitude, u.latitude, 
    ProgramManagement.dbo.CoordinateDistanceMiles(u.Latitude, u.Longitude, z.Lat, z.Long) dist 
FROM #unmatched2 u 
    CROSS JOIN (
    SELECT max(Latitude) Lat, max(Longitude) Long 
    FROM ProgramManagement.dbo.zipcode_lookup 
    WHERE ZIPCode = 92101 
) z 

这是假设ROWID是一个唯一的标识符,如果没有,就可以简单的组...(这实际上是更接近你的循环做什么)

SELECT u.RowID, u.Zipcode, 
    max(u.Longitude) Longitude, max(u.latitude) Latitude, 
    ProgramManagement.dbo.CoordinateDistanceMiles(max(u.Latitude), max(u.Longitude), z.Lat, z.Long) dist 
FROM #unmatched2 u 
    CROSS JOIN (
    SELECT max(Latitude) Lat, max(Longitude) Long 
    FROM ProgramManagement.dbo.zipcode_lookup 
    WHERE ZIPCode = 92101 
) z 
GROUP BY u.RowID, u.Zipcode