如何提供重复的唯一号码?
问题描述:
我有一个表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
答
在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, ...;
但是,涉及用户 变量的表达式的评估顺序未定义。
wow awsome man thnx – Delete