Нарича се избор на групов максимум на колона. Ето няколко различни подхода за mysql.
Ето как бих го направил:
SELECT *
FROM (SELECT id, max(version_id) as version_id FROM table GROUP BY id) t1
INNER JOIN table t2 on t2.id=t1.id and t1.version_id=t2.version_id
Това ще бъде сравнително ефективно, въпреки че mysql ще създаде временна таблица в паметта за подзаявката. Предполагам, че вече имате индекс на (id, version_id) за тази таблица.
Дефицит в SQL е, че повече или по-малко трябва да използвате подзаявка за този тип проблеми ( полусъединени са друг пример).
Подзаявките не са добре оптимизирани в mysql, но некорелираните подзаявки не са толкова лоши, стига да не са толкова огромни, че да бъдат записани на диска, а не в паметта. Като се има предвид, че в тази заявка има само две int, подзаявката може да бъде с милиони редове много преди това да се случи, но подзаявката select * в първата ви заявка може да пострада от този проблем много по-рано.