PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Trouver des enregistrements uniques, classés par champ en association, avec PostgreSQL et Rails 3 ?

La requête que vous recherchez devrait ressembler à celle-ci :

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)

Vous pouvez joindre dans la table user si vous avez besoin des colonnes de cette table dans le résultat, sinon vous n'en avez même pas besoin pour la requête.
Si vous n'avez pas besoin de min_created_at dans le SELECT liste, vous pouvez simplement la laisser de côté.

Ça devrait être facile à traduire en Ruby (pour lequel je ne suis pas doué).

Pour obtenir l'enregistrement complet de l'utilisateur (comme je le déduis de votre commentaire):

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

Ou :

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)

Avec PostgreSQL 9.1+, vous pouvez simplement écrire :

GROUP  BY u.id

(comme dans MySQL) .. fourni id est la clé primaire.

Je cite les notes de version :