2017-07-20 90 views
0

)我完全难以在MySQL中通过rank()over(partition by x,order by y desc)创建一个新列“LoginRank”。在mysql中对分区进行排名(

从sql服务器我会写下面的查询,创建一个由“登录”分组并按“ID”排序的“Loginrank”列。

select ds.id, 
     ds.login, 
     rank() over(partition by ds.login order by ds.id asc) as LoginRank 
from tablename.ds 

我有下表。

create table ds (id int(11), login int(11)) 
insert into ds (id, login) 
values (1,1), 
    (2,1), 
    (3,1), 
    (4,2), 
    (5,2), 
    (6,6), 
    (7,6), 
    (8,1) 

我试过很多应用现有的MySQL修复到我的数据集,但仍然遇到问题。

任何帮助,非常感谢。 谢谢!

回答

1

尝试此查询: - MySql支持Rank()函数。

select result.id,result.login,result.rank from (
    SELECT id, 
       login, 
       IF([email protected],@curRank:[email protected],@curRank:[email protected]_sequence) AS rank, 
       @_sequence:[email protected]_sequence+1, 
       @last:=login 
    FROM  ds , (SELECT @curRank := 1, @_sequence:=1, @last:=0) r 
    ORDER BY id asc) as result; 

希望它能帮助你!

+0

谢谢。我利用了你的回应,并且运作良好。 –

+0

@SamuelEllett你的欢迎:) –

+7

不应该是“不**支持”吗? – Barmar