Pokud nechcete svůj datový model měnit, můžete použít DISTINCT ON
pro načtení nejnovějšího záznamu z tabulky "b" pro každý záznam v "a":
SELECT DISTINCT ON (a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY a.id, b.date DESC
Pokud se chcete vyhnout „třídění“ v dotazu, může přidat index jako tento pomoci, ale nejsem si jistý:
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
Případně, pokud chcete seřadit záznamy z tabulky "a" nějakým způsobem:
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
Alternativní přístupy
Všechny výše uvedené dotazy však stále potřebují číst všechny odkazované řádky z tabulky "b", takže pokud máte hodně dat, může to být stále příliš pomalé.
Můžete vytvořit novou tabulku, která bude obsahovat pouze nejnovější záznam "b" pro každý a.id
- nebo dokonce přesunout tyto sloupce do samotné tabulky "a".