PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Trovare record univoci, ordinati per campo in associazione, con PostgreSQL e Rails 3?

La query che stai cercando dovrebbe assomigliare a questa:

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)

Puoi entrare nella tabella user se hai bisogno di colonne di quella tabella nel risultato, altrimenti non ne hai nemmeno bisogno per la query.
Se non hai bisogno di min_created_at nel SELECT lista, puoi semplicemente lasciarla via.

Dovrebbe essere facile da tradurre in Ruby (cosa in cui non sono bravo).

Per ottenere l'intero record utente (come deduco dal tuo commento):

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

Oppure:

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)

Con PostgreSQL 9.1+ puoi semplicemente scrivere:

GROUP  BY u.id

(come in MySQL) .. fornito id è la chiave primaria.

Cito le note sulla versione :