Мне любопытно, возможно ли выполнить аналогичный запрос с использованием CTE (значения «id» могут отличаться, не обязательно в последовательности)
SELECT
elt((@mxId := if(@mxId + 1 <= 3, @mxId + 1, 1)), 5, 10, 22, 33) val,
id
FROM my_table
INNER JOIN (SELECT @mxId := 0) tmp;
Ожидаемый результат:
val | id
-----+----
5 | 1
10 | 2
22 | 3
5 | 4
10 | 5
22 | 6
5 | 7
10 | 8
22 | 9
5 | 10
10 | 11
22 | 12
5 | 13
10 | 14
22 | 15
5 | 16
10 | 17
22 | 18
5 | 19
10 | 20