2016-03-02 24 views
2

我遇到問題。所以,我的表格:Sql獲取每個級別的最後3行

id  level  score 
1  1   2 
2  1   4 
3  2   1 
4  3   2 
5  4   10 
....................... 

而且我想得到每個級別的最後3行排序desc。我試過這樣:

select * from table order by score desc group by level LIMIT 3 

但是不行。你能幫我嗎 ? THX提前對不起我的英語

+0

可能這個鏈接幫助:http://stackoverflow.com/questions/35363047/random-2-records-according-to-position-and-order-by-position –

+0

@Ahhik Chakraborty給你很好的解決方案,這篇文章也是非常有用的:http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ – mitkosoft

回答

4

有幾種技術來做到這一點,一個方法是使用用戶定義的變量爲

select id,`level`,score 
from (
    select *, 
    @rn:= if(@prev_level = `level`,@rn+1,1) as rn, 
    @prev_level:= `level` 
    from mytable,(select @rn:=0,@prev_level:=0)r 
    order by `level`,score desc 
)r 
where r.rn <=3; 

demo

-1

SQL解決方案:

select * from table t1 
WHERE 
     (
      SELECT COUNT(*) 
      FROM table t 
      WHERE t.level = t1.level AND 
        t.score >= t1.score 
     ) <= 3 order by t1.level, t1.score desc 

SqlFiddle

+1

能完成這項工作嗎? – user2407394

+0

因此,工作解決方案會在SO中投票,因爲有人不瞭解SQL。 BTW向測試數據添加SQLfiddle以顯示其工作情況 – user2407394