[英]Access SQL - Return unique rows based on criteria in multiple columns
我有两个包含行驶时间数据的邮政编码表。 第一个(称为“ DTM”)包含4列。 前两列是“从”和“到”邮政编码,然后是行驶时间和它们之间的行驶距离。 该表包含两次邮政编码的每种组合,其中“从”和“到”邮政编码颠倒了。 它看起来像这样:
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
...
该表包含大约1,650万条记录。
第二个表(称为“ STOREZIPS”)包含属于商店的邮政编码列表。
我的目标是使该国家/地区中的每个邮政编码与附近的商店的邮政编码匹配,并显示行车时间和行车距离。 所以我想做的是从第一张表中提取TO_Zip
与第二张表中的一个TO_Zip
匹配的行,并且具有最低的Drivetime(min)
。
但是,在某些情况下,两个Zip与另一个Zip具有相同的行驶时间Drivetime(min)
。 如果发生这种情况,应选择Distance(mtr)
最低的行。
我已经尝试解决了一段时间,但似乎无法以仅选择最接近的From_Zip
的方式来From_Zip
。
任何帮助或建议,表示赞赏。
我认为在这种情况下,您将需要使用CTE。 您可以在此处阅读更多信息: https : //technet.microsoft.com/zh-cn/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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.