2017-12-27 378 views
0

我有一個表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 

在此先感謝

回答

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

0

在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, ...; 

但是,涉及用戶 變量的表達式的評估順序未定義。