繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM