Więc stworzyłem coś takiego i nie działa.
INSERT INTO `position` SELECT * FROM `position` WHERE id = 31253 AND cartId = 15647 ON DUPLICATE KEY UPDATE id = MAX(id) + 1;
Z LAST_INSERT_ID() także
Oczywiście bez problemu można napisać zapytanie typu:
INSERT INTO TABLE (a,b,c) SELECT a,b,c FROM TABLE WHERE id = ?;
Jednakże co z sytuacją gdy tabela ma dużo kolumn, albo może mieć w przyszłości dodatkową kolumnę która nie można zapomnieć pominąć przy duplikacji rekordu.