PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

SQL dołączył do ostatniej daty

DISTINCT ON czy jest twoim przyjacielem. Oto rozwiązanie z poprawnym składnia:

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;

Lub, aby uzyskać cały wiersz 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;

Szczegółowe wyjaśnienie tej techniki, a także alternatywne rozwiązania w ramach tego ściśle powiązanego pytania:
Wybrać pierwszy wiersz w każdej grupie GROUP BY?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć tabelę z określoną kolumną w postgresql

  2. Zapytanie Plan postgresu z indeksami

  3. Heroku:PG::ConnectionBad:nie można połączyć się z serwerem:Połączenie odrzucone

  4. Dynamiczne wykonywanie zapytań w PL/pgSQL

  5. Interpolacja między dwiema wartościami w jednym zapytaniu