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

Nalezení jedinečných záznamů, seřazených podle polí ve spojení, s PostgreSQL a Rails 3?

Dotaz, který hledáte, by měl vypadat takto:

SELECT user_id, min(created_at) AS min_created_at
FROM   cards
WHERE  company_id = 1
GROUP  BY user_id
ORDER  BY min(created_at)

Můžete se připojit k tabulce user pokud ve výsledku potřebujete sloupce této tabulky, jinak je pro dotaz ani nepotřebujete.
Pokud nepotřebujete min_created_at v SELECT seznamu, můžete ho nechat.

Mělo by být snadné přeložit do Ruby (ve kterém nejsem dobrý).

Chcete-li získat celý uživatelský záznam (jak vyvozuji z vašeho komentáře):

SELECT u.*,
FROM   user u
JOIN  (
    SELECT user_id, min(created_at) AS min_created_at
    FROM   cards
    WHERE  company_id = 1
    GROUP  BY user_id
    ) c ON u.id = c.user_id
ORDER  BY min_created_at

Nebo:

SELECT u.*
FROM   user u
JOIN   cards c ON u.id = c.user_id
WHERE  c.company_id = 1
GROUP  BY u.id, u.col1, u.col2, ..   -- You have to spell out all columns!
ORDER  BY min(c.created_at)

S PostgreSQL 9.1+ můžete jednoduše napsat:

GROUP  BY u.id

(jako v MySQL) .. poskytnuto id je primární klíč.

Cituji poznámky k vydání :



  1. Python, MySQL a SELECT výstup do slovníku s názvy sloupců pro klíče

  2. INSERT 10 milionů dotazů do 10 minut v Oracle?

  3. Jak vytvořit Snapshot Replication

  4. Jak získat velikost databáze MySQL pro vaši databázi?