我的SQL查询有问题。我得到了这样的表数据:
Name Value Other
Jim 301 v1
Jim 302 v1
Jim 303 v1
Mat 30 else
Mat 301 else
Mat 3091 else
我尝试获取名称的Name和max(value)列以及同名的第二个最高值,并为单个select中的所有名称执行此操作。任何人都知道如何做到这一点? 输出示例:Mat,3091,301;吉姆,303,302
答案 0 :(得分:0)
标准SQL方式将使用rank()
:
select t.*
from (select t.*,
rank() over (partition by name order by value desc) as seqnum
from t
) t
where seqnum <= 2;
注意:如果存在关系,则每个名称返回两行以上。
答案 1 :(得分:0)
为每个名称(MySQL)选择前两个值的行:
select t.*
from myTable t
where t.value >= (
select t1.value
from myTable t1
where t1.name = t.name
order by t1.value desc
limit 1 offset 1 -- second highest value
)