簡體   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