MySQL在max(value)和第二个最高值之间获得行

时间:2016-09-16 10:29:18

标签: mysql sql select

我的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

2 个答案:

答案 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
)