从事一个项目,该项目将失败的交付与全新的交付相匹配,并基于haversine公式进行最接近的距离匹配。
目前,我下面的代码让我在 ROUTEID LIKE '%NDD%' 中的每个失败交付与每个新交付 NOT LIKE '%NDD%' (以及其他一些文件夹,但可以忽略)进行一对一匹配
因此,针对 5000 站的 5 次交付为我提供了 25000 种可能性的列表。如果我把它带到 excel 并运行“删除重复项”,中提琴,我有最接近的匹配项,没有重复项。
我怎样才能避免超越并将其缩小到仅 MIN() 匹配?那时,我想把它变成一个更新查询,它将我失败的交付的 ROUTEID 更新为我的新交付中最接近的匹配。
SELECT DISTINCT ORS.PKID, ORS.Reference1, P.ROUTEID, P.SEQUENCE,
MIN(round(
ACOS(COS(RADIANS(90-ORS.lat))
*COS(RADIANS(90-p.latpoint))
+SIN(RADIANS(90-ORS.lat))
*SIN(RADIANS(90-p.latpoint))
*COS(RADIANS(ORS.lon-p.longpoint)))
*3958.756,2))
AS 'DISTANCE_in_mi'
FROM tblOrderRouteStops AS ORS WITH (NOLOCK)
LEFT JOIN
(
SELECT ORS2.lat AS latpoint, ors2.lon AS longpoint,
ORS2.Sequence, ORS2.routeid
from tblOrderRouteStops ORS2 WITH (NOLOCK)
WHERE ORS2.CUSTID = 180016
AND ORS2.routeID NOT LIKE '%NDD%'
AND ORS2.routeID NOT LIKE '%PND%'
AND ORS2.routeID NOT LIKE '%NFW%'
) AS p ON 1=1
WHERE ORS.CustID = 180016
AND ORS.RouteID LIKE '%NDD%'
AND P.RouteID NOT LIKE '%NDD%'
AND P.RouteID NOT LIKE '%PND%'
AND P.RouteID NOT LIKE '%NFW%'
GROUP BY ORS.PKID,ORS.REFERENCE1,P.ROUTEID,P.SEQUENCE
ORDER BY DISTANCE_in_mi