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

Zobrazení nejnovějších zpráv z tabulky zpráv, skupiny podle uživatelů

To by mělo být poměrně efektivní:

SELECT u.name, sub.*
FROM  (
   SELECT DISTINCT ON (1)
          m.message_from AS user_id
        , m.message AS last_message
   FROM   users    u
   JOIN   messages m ON m.message_to = u.id
   WHERE  u.name = 'Paul'   -- must be unique
   ORDER  BY 1, m.id DESC
   ) sub
JOIN  users u ON sub.user_id = u.id;

Vypočítejte všechny uživatele s nejnovější zprávou v dílčím dotazu sub pomocí DISTINCT ON . Poté se připojte k celkovému počtu users podruhé k vyřešení názvu.

Podrobnosti pro DISTINCT ON :
Vybrat první řádek v každé skupině GROUP BY?

Stranou:Použití „id“ a „name“ jako názvů sloupců není příliš užitečná konvence pojmenování.



  1. Cross Join v Oracle

  2. JPA:Vztah mnoho k mnoha - JsonMappingException:Nekonečná rekurze

  3. Spuštění MariaDB v nastavení hybridního cloudu

  4. Oracle 11g Replication – použití obnovení při odevzdání se vzdálenou databází (odkazy na databázi)