2016-09-16 82 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; 

注:如果有聯繫,那麼這對於每名返回超過兩行。