sql >> Databáze >  >> RDS >> PostgreSQL

SQL připojeno k poslednímu datu

DISTINCT ON nebo je tvůj přítel. Zde je řešení se správným syntaxe:

SELECT a.id, b.updated, b.col1, b.col2
FROM   table_a as a
LEFT   JOIN (
   SELECT DISTINCT ON (table_a_id)
          table_a_id, updated, col1, col2
   FROM   table_b
   ORDER  BY table_a_id, updated DESC
   ) b ON a.id = b.table_a_id;

Nebo chcete-li získat celý řádek z table_b :

SELECT a.id, b.*
FROM   table_a as a
LEFT   JOIN (
   SELECT DISTINCT ON (table_a_id)
          *
   FROM   table_b
   ORDER  BY table_a_id, updated DESC
   ) b ON a.id = b.table_a_id;

Podrobné vysvětlení této techniky a také alternativní řešení pod touto úzce související otázkou:
Vybrat první řádek v každé skupině GROUP BY?



  1. Nějaký důvod stále používat hadí pouzdro pro databázové tabulky a sloupce?

  2. Spočítejte a zobrazte, kolik konkrétních sloupců je výsledkem

  3. Dynamický příkaz SQL SELECT s PHP na základě uživatelských možností

  4. Aktualizujte jeden ze 2 duplikátů v tabulce databáze serveru SQL