Access SQL - 根据多列中的条件返回唯一行

时间:2018-04-12 09:40:38

标签: sql ms-access

我有两个包含驱动时间数据的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被选中。

感谢任何帮助或建议。

1 个答案:

答案 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