MySQL sql Rank()函数实现

 MySQL sql Rank()函数实现

两列数据,以a列作为分组,查找以b列倒序的第一个。

select a,b,rownum,rank from 
    (select 
         tt.a,
         tt.b,
         @rownum:=@rownum+1 rownum,#@rownum变量加1,作为rownumber,        
         if(@temp=tt.a,@rank:=@rank+1,@rank:=1) as rank,#tt.a字段等于@temp变量,则@rank加1,否则@rank赋值为1
         @temp:=tt.a#将tt.a字段赋予@temp变量 注意该字段赋值顺序,先赋值,再自加减
        
    FROM#以下两表作关联
       (select a,b from your_table_name 
           group by a,b 
           order by a asc,b desc) tt,#一定要将同组的数据排序到一起,业务上是实际是以a作为分组,需要放前面;b业务上实际是作排序字段
       (select @rank:=0,@rownum:=0,@temp:=null) ee
    ) result
    having rank =1;

 注意 :@temp:=tt.a, 字段顺序,之前将该字段放在最后,发现问题,应该缓存出现了问题,rank列表全部为1,在该SQL执行第二次的时候rank列表才显示正常。

 

 

试试这个:

SELECT * FROM (

     SELECT * FROM posts ORDER BY dateline DESC

) GROUP BY  tid ORDER BY dateline DESC LIMIT 10  

  

 

参考:http://blog.csdn.net/ariczhou/article/details/48808417

猜你喜欢

转载自crabdave.iteye.com/blog/2170014