Наиболее эффективное решение наибольшие n-на-группу проблемы в Postgres обычно используют (собственный) оператор distinct on ()
Таким образом, чтобы получить последнюю версию для каждого a.id, вы можете использовать:
select distinct on (a.id) b.*
from a
join b on a.id = b.aid
order by a.id, b.version desc;
Вышеуказанное возвращает:
itemid | version | qty | aid
-------+---------+-----+----
44 | 2 | 2 | 200
44 | 1 | 2 | 201
Затем вы можете суммировать по результату:
select sum(qty)
from (
select distinct on (a.id) b.qty
from a
join b on a.id = b.aid
order by a.id, b.version desc
) t;
Обратите внимание, что обычно order by
в производной таблице бесполезен, но в этом случае это необходимо, потому что иначе distinct on ()
не будет работать.
Онлайн пример: http://rextester.com/DRHK19268