2017-12-27 12 views
0

나는이 질문이중복되는 고유 번호를 부여하는 방법은 무엇입니까?

같은

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

반환 데이터를 중복을 발견하고이

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

처럼 업데이트해야이

52 
52 
53 
54 
54 
54 
55 

같은 테이블 ID를 가지고

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

와우 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, ...; 

그러나 사용자 변수를 포함하는 표현식에 대한 평가 순서는 정의되지 않습니다.