2017-07-20 150 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