我有一张桌子"率"它包含列" id"," location"," local_rate"," long_rate"。 Id是区分客户端的整数值。结果按位置分组。每个位置组都有一个来自每个客户的条目。每个客户端都有不同的local_rate和long_rate。我需要得到的是位置,最低的local_rate和具有该速率的客户端,以及最低的long_rate和具有该速率的客户端。表格中的每个位置都会有一行。如果某个费率有多个匹配结果,则应选择一个并返回该值,并使用该值返回客户端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。地点,当地费率和长费率是正确的。
答案 0 :(得分:1)
首先,您可以计算一个子查询中每个位置的最小和最大本地费率。然后,您可以加入原始数据以获取客户端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;
如果有多个匹配的行,则会为每个位置生成多行。你的问题没有说明在这种情况下要做什么。