如何提供重复的唯一号码?

问题描述:

我有一个表IDS这样如何提供重复的唯一号码?

52 
52 
53 
54 
54 
54 
55 

我需要找到复制并更新他们这样

52 1 
52 2 
53 1 
54 1 
54 2 
54 3 
55 1 

此查询

SELECT klient_id, 
    (
    SELECT COUNT(klient_id) 
    FROM vClient_priklucok 
    WHERE klient_id = data.klient_id 
) AS count 
FROM vClient_priklucok AS data 

回报这样

数据
52 2 
52 2 
53 1 
54 3 
54 3 
54 3 
55 1 

在此先感谢

SELECT id,   
     @rownum := case when @prevId <> id then 1 else @rownum + 1 end as rownumber, 
     @prevId := id 
FROM your_table 
CROSS JOIN (SELECT @rownum := 0, @prevId := 0) r 
ORDER BY id ASC 
+0

wow awsome man thnx – Delete

在MySQL中,您可以使用变量进行此操作。但是,你需要非常小心。变量只能在一个表达式中引用。

此外,当您使用变量时,最新版本的MySQL需要子查询来排序数据。所以,我建议:

select t.id, 
     (@rn := if(@i = id, @rn + 1, 
        if(@i := id, 1, 1) 
       ) 
     ) as counter 
from (select t.* 
     from t 
     order by t.id 
    ) t cross join 
    (select @rn := 0, @i := -1) params; 

由于documentation解释说:

在下面的语句,你可能会认为,MySQL将首先评估 @a,然后做一个分配第二:

SELECT @a, @a:[email protected]+1, ...; 

但是,涉及用户 变量的表达式的评估顺序未定义。