为每位客户

时间:2015-09-29 09:47:06

标签: sql sql-server

我有两个表,一个是商店位置列表(lat / long),另一个是客户列表(地址lat / long)。

我需要的是一个为每个客户计算最近商店的查询?

1 个答案:

答案 0 :(得分:1)

你的问题的答案叫做Haversine公式,你可以解决它here,它提供了应该在SQL Server中运行的实际SQL代码。

您需要在两个表之间取CROSS JOIN,这将为您提供每对客户地址和商店位置。您需要考虑这些对中的每一对,因为您不知道哪一对是先验的最近邻居。

对于每一对,您可以使用此SQL代码来获取客户和商店之间的距离:

111.045*DEGREES(ACOS(COS(RADIANS(lat1)) * COS(RADIANS(lat2)) *
                     COS(RADIANS(long1) - RADIANS(long2)) +
                     SIN(RADIANS(lat1)) * SIN(RADIANS(lat2)))) AS distance_in_km

此处(lat1, long1)是客户的经度和纬度,(lat2, long2)是特定商店的值。