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