2016-07-19 50 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

相关问题