Более современный ответ с использованием CTE:
;WITH Numbered as (
SELECT ID,ROW_NUMBER() OVER (PARTITION BY group ORDER BY data desc) rn FROM Table
)
SELECT ID from Numbered where rn=1
PostgreSQL имеет довольно приличную документацию в Интернете, посмотрите оконные функции и С запросами .В этом случае мы разбиваем строки в таблице на основании того, к какой группе они принадлежат.Внутри каждого раздела мы нумеруем строки на основе их столбца данных (номер строки 1 присваивается наибольшему значению данных).
Во внешнем запросе мы просто запрашиваем строки, которым был присвоен номер строки 1внутри их раздела, который, если вы следуете логике, должен быть максимальным значением данных в каждой группе.
Если вам нужно иметь дело со связями (т. е. если несколько строк в группе имеют максимальное значение данных длягруппа, и вы хотите, чтобы оба появились в вашем наборе результатов), вы можете переключиться с ROW_NUMBER()
на RANK()