A simple DELETE JOIN
should do it; delete all rows where there exists at least one row with a matching collection_id
and product_id
and a greater value of id
;
DELETE p1
FROM prices p1
JOIN prices p2
ON p1.collection_id = p2.collection_id
AND p1.product_id = p2.product_id
AND p1.id < p2.id
An SQLfiddle to test with, and remember to always back up your data before running updates or deletes from random people on the Internet.