Ако не искате да промените своя модел на данни, можете да използвате DISTINCT ON
за извличане на най-новия запис от таблица "b" за всеки запис в "a":
SELECT DISTINCT ON (a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY a.id, b.date DESC
Ако искате да избегнете „сортиране“ в заявката, добавянето на индекс като този може да ти помогна, но не съм сигурен:
CREATE INDEX b_id_date ON b (id, date DESC)
SELECT DISTINCT ON (b.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY b.id, b.date DESC
Като алтернатива, ако искате да сортирате записи от таблица "a" по някакъв начин:
SELECT DISTINCT ON (sort_column, a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY sort_column, a.id, b.date DESC
Алтернативни подходи
Всички горепосочени заявки обаче трябва да прочетат всички посочени редове от таблица "b", така че ако имате много данни, може пак да е твърде бавно.
Можете да създадете нова таблица, която съдържа само най-новия запис "b" за всеки a.id
-- или дори да преместите тези колони в самата таблица "a".