Старая версия должна использовать некоторые пользовательские переменные, чтобы получить ваш результат.
Вот почему он довольно уродливый
CREATE Table user_in_queues(user_id INTEGER, queue_id INTEGER , number_in_queue INTEGER)
✓
INSERT INTO user_in_queues VALUES (1,1,0),(2,1,0),(3,2,0),(4,1,0),(5,2,0);
✓
SELECT * FROM user_in_queues;
user_id | queue_id | number_in_queue
------: | -------: | --------------:
1 | 1 | 0
2 | 1 | 0
3 | 2 | 0
4 | 1 | 0
5 | 2 | 0
SELECT
user_id, queue_id, number_in_queue
FROM
(SELECT
user_id,
IF(@queue = queue_id, @rn:=@rn + 1, @rn:=1) number_in_queue,
@queue:=queue_id queue_id
FROM
(SELECT
*
FROM
user_in_queues
ORDER BY queue_id , user_id) t1, (SELECT @queue:=0) t2, (SELECT @rn:=0) t3) t4
ORDER BY user_id;
user_id | queue_id | number_in_queue
------: | -------: | --------------:
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 1 | 3
5 | 2 | 2
UPDATE user_in_queues u
SET number_in_queue = (SELECT
number_in_queue
FROM
(SELECT
user_id,
IF(@queue = queue_id, @rn:=@rn + 1, @rn:=1) number_in_queue,
@queue:=queue_id queue_id
FROM
(SELECT
*
FROM
user_in_queues
ORDER BY queue_id , user_id) t1, (SELECT @queue:=0) t2, (SELECT @rn:=0) t3) t4
WHERE user_id = u.user_id AND queue_id = u.queue_id )
✓
SELECT * FROM user_in_queues;
user_id | queue_id | number_in_queue
------: | -------: | --------------:
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 1 | 3
5 | 2 | 2
дБ <> скрипка здесь