2017-12-27 21 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

wow awsome man thnx – Delete

0

MySQLでは、これを変数で行うことができます。しかし、あなたは非常に注意する必要があります。変数は1つの式でのみ参照する必要があります。

さらに、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を評価した後、第2の割り当てを行いますことを考えるかもしれない:

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

ただし、ユーザー 変数を含む式の評価順序は未定義です。

関連する問題