2016-07-19 68 views
0

我試圖用多個非唯一外鍵來查詢一個表。我想選擇「存儲」與最小距離(英里),所以可能有多個商店的距離不同,我想有一個明顯的一行最低英里選擇最小列值並僅查詢不同的相應行

SELECT 
    m.store1, m.miles, mitable.region, mitable.terminal, mitable.city, mitable.state 
FROM 
    (SELECT 
     store1, MIN (miles) as miles 
    FROM 
     mitable 
    GROUP BY 
     region, store1) m 
INNER JOIN 
    mitable ON m.store1 = mitable.store1 
      AND m.miles = mitable.miles 

眼下,這是拉動了錯誤的數據,我...我卡住了!

+0

你可以請出示一些示例數據和預期的結果,這裏是一個例子來看看於:https://spaghettidba.com/2015/04/24/how-to-post- at-sql-question-on-a-public-forum/ – TheGameiswar

回答

1

只需使用row_number()

select t.* 
from (select t.*, 
      row_number() over (partition by store1 order by miles asc) as seqnum 
     from mitable t 
    ) t 
where seqnum = 1; 

編輯:

如果你想用里程最少的行,那麼你可以做:

select top 1 t.* 
from mitable t 
order by miles asc; 

這正好返回一行。如果你想要綁定多行,則使用top with ties

+0

這仍然沒有返回我想要的最低值。我注意到在一些行上它返回了第二或第三最低。 –

0

呦很接近。只要刪除regiongroup by

SELECT 
    m.store1, m.miles, mitable.region, mitable.terminal, mitable.city, mitable.state 
FROM 
    (SELECT 
     store1, MIN (miles) as miles 
    FROM 
     mitable 
    GROUP BY 
     store1 
     --region 
    ) m 
INNER JOIN 
    mitable ON m.store1 = mitable.store1 
      AND m.miles = mitable.miles 
+0

與上面相同的問題。我有這種情況,它仍然沒有拉正確的行。難道我需要把它變成一個浮動嗎? –

+0

請顯示樣本數據,我可以幫助 – NEER

相關問題