Создайте свою очередь в виде связанного списка:
id parent
09 00
10 09
11 10
12 11
и запрос такой:
WITH vq (id, position) AS (
SELECT id, 1
FROM queue
WHERE parent = 0
UNION ALL
SELECT id, v.position + 1
FROM queue q, vq v
WHERE q.parent = v.id
)
SELECT *
FROM vq
Чтобы удалить элемент из очереди, просто обновите его родительский элемент до -1
.
Это более эффективно, чем обновление всех позиций всех записей в таблице.