我有两个包含驱动时间数据的zipcodes表。第一个(称为“DTM”)包含4列。前两列是From和To zipcodes,后面是drivetime和它们之间的行驶距离。此表包含两次zipcodes的每个组合,其中From和To zips相反。它看起来像这样:
FROM_ZIP TO_Zip Drivetime(min) Distance(mtr)
1011 1011 0 0
1011 1012 3 650
1011 1013 4 850
1011 1014 4 900
1012 1011 3 650
1012 1012 0 0
1012 1013 2 500
...
此表包含大约1650万条记录 第二个表(称为“STOREZIPS”)包含属于商店的zipcodes列表。
我的目标是将国家/地区的每个邮政编码与最靠近的商店的邮政编码进行匹配,并显示行车时间和行车距离。所以我要做的是从第一个表中提取TO_Zip
与第二个表中的一个zipcodes匹配的行,并且具有最低的Drivetime(min)
。
但是也存在两个Zip与另一个Zip具有相同Drivetime(min)
的情况。如果发生这种情况,则应选择Distance(mtr)
最低的行。
我一直试图解决这个问题一段时间,但似乎无法以这样的方式得到它,只有最接近的From_Zip
被选中。
感谢任何帮助或建议。
答案 0 :(得分:0)
我认为在这种情况下你需要使用CTE。你可以在这里阅读更多: https://technet.microsoft.com/en-us/library/ms190766(v=sql.105).aspx
如果我理解得很好,我认为示例sql可能如下所示:
with cte as
(
select min(c.Drivetime) as minimum, c.zipT,
c.Distance, rank() over (partition by c.TO_Zip order by c.Distance) as place
from DTM c
inner join STOREZIPS s on c.TO_Zip = s.TO_Zip
where c.Drivetime > 0
group by c.TO_Zip, c.Distance
) select * from cte where place = 1