使用多个MySQL连接来获取多个值

使用多个MySQL连接来获取多个值,mysql,Mysql,我有一个表“rate”,其中有“id”、“location”、“local\u rate”、“long\u rate”列。 Id是用于区分客户端的整数值。结果按位置分组。每个位置组都有一个来自每个客户端的条目。每个客户都有不同的本地利率和长期利率。我需要得到的是位置,最低本地利率和具有该利率的客户,以及最低长期利率和具有该利率的客户。表中的每个位置都有一行。如果某个速率有多个匹配结果,则只需选择一个,然后返回值和具有该值的客户端id 结果将显示为: location1 | id(min_loca

我有一个表“rate”,其中有“id”、“location”、“local\u rate”、“long\u rate”列。 Id是用于区分客户端的整数值。结果按位置分组。每个位置组都有一个来自每个客户端的条目。每个客户都有不同的本地利率和长期利率。我需要得到的是位置,最低本地利率和具有该利率的客户,以及最低长期利率和具有该利率的客户。表中的每个位置都有一行。如果某个速率有多个匹配结果,则只需选择一个,然后返回值和具有该值的客户端id

结果将显示为:

location1 | id(min_local_rate) | min_local_rate | id(min_long_rate) | min_long_rate
location2 | id(min_local_rate) | min_local_rate | id(min_long_rate) | min_long_rate
....
以下是我目前的疑问:

SELECT local.location, local.id, local.local_rate, long.id, long.long_rate
FROM
(SELECT MIN(local_rate), location, id FROM rate GROUP BY location) local
JOIN
(SELECT MIN(long_rate), location, id FROM rate GROUP BY location) long
ON local.location = long.location
GROUP BY local.location; 

我得到的是每一行都有相同的本地客户端id,每一行都有相同的长客户端id。位置、本地费率和长期费率是正确的。

首先,您可以在一个子查询中计算每个位置的最小和最大本地费率。然后,您可以连接回原始数据以获得客户机ID

如果只有一个客户机具有最小/最大值,则应执行以下操作:

select l.location, l.minlr, rmin.id, l.maxlr, rmax.id
from (select location, min(local_rate) as minlr, max(local_rate) as maxlr
      from rate r
      group by location
     ) l join
     rate rmin
     on rmin.location = l.location and rmin.local_rate = l.minlr join
     rate rmax
     on rmax.location = l.location and rmax.local_rate = l.maxlr;

如果有多行匹配,这将为每个位置生成多行。你的问题没有说明在这种情况下该怎么办。

我很感谢你的评论。我根本不想找最高的价格。我在找最低的本地利率和最低的长期利率。@NewGuy。我只是泛泛地使用“利率”。好吧,我已经编辑了这个问题,试图让目标更清晰一些。子查询本身正好满足我对位置、最小本地速率和最小长速率的要求。完整查询不返回任何行。@NewGuy。这就是这个查询所做的,虽然ID在费率之后。不确定我最初是否转录错了,但它现在可以工作了。非常感谢。