Как видите, есть решение, которое работает с использованием только стандартного SQL, но оно длинное и сложное.
Обратите внимание, что также можно написать "Привет, мир!" программа, которая работает правильно на трех разных языках программирования. Это обычно не добавляет никакой ценности вашей программе. Гораздо проще просто написать программу три раза с учетом конкретного синтаксиса каждого языка.
Я думаю, что с SQL часто лучше забыть, пытаясь найти решение, которое работает во всех СУБД, и использовать специфические расширения и идиомы вендора, которые облегчают подобные запросы. Например, в MS SQL Server вы можете сделать что-то вроде этого:
SELECT Field1, Field2, Field3
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY field2) AS rn
FROM table1
) AS T1
WHERE rn = 1
В любом случае, у вас уже есть общее решение, поэтому я просто подумал, что предложу эту альтернативную точку зрения.