2016-09-16 83 views
-1

我有SQL查询的问题。我在这样的表中的数据:MySQL获取最大值(值)和第二高值

Name Value Other 
Jim  301  v1 
Jim  302  v1 
Jim  303  v1 
Mat  30  else 
Mat  301  else 
Mat  3091 else 

和IM试图让名称和max(值)列名和同名第二高值,这样做,也是对单一选择的所有名称。任何人都知道如何做到这一点? 输出示例:Mat,3091,301;吉姆,303302

+0

标签与正在使用的数据库你的问题。 –

+0

请在问题 –

+0

@NikhilVC完成后添加预期结果,所以你有什么想法? – djdecks93

回答

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 
) 
+0

谢谢,这就是我要找的 – djdecks93

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; 

注:如果有联系,那么这对于每名返回超过两行。