Als u uw gegevensmodel niet wilt wijzigen, kunt u DISTINCT ON
. gebruiken om het nieuwste record op te halen uit tabel "b" voor elk item in "a":
SELECT DISTINCT ON (a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY a.id, b.date DESC
Als u een "sortering" in de zoekopdracht wilt vermijden, kan het toevoegen van een index zoals deze misschien help je, maar ik weet het niet zeker:
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
Als alternatief, als u op de een of andere manier records uit tabel "a" wilt sorteren:
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
Alternatieve benaderingen
Alle bovenstaande zoekopdrachten moeten echter nog steeds alle rijen waarnaar wordt verwezen lezen uit tabel "b", dus als je veel gegevens hebt, kan het nog steeds gewoon te traag zijn.
U kunt een nieuwe tabel maken, die alleen het nieuwste "b"-record bevat voor elke a.id
-- of verplaats die kolommen zelfs naar de "a"-tabel zelf.