sql >> Databasteknik >  >> RDS >> PostgreSQL

Hitta unika poster, sorterade efter fält i samarbete, med PostgreSQL och Rails 3?

Frågan du letar efter bör se ut så här:

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)

Du kan gå med i tabellen user om du behöver kolumner i den tabellen i resultatet, annars behöver du inte ens den för frågan.
Om du inte behöver min_created_at i SELECT listan kan du bara lämna bort den.

Borde vara lätt att översätta till Ruby (vilket jag inte är bra på).

För att få hela användarposten (som jag härleder från din kommentar):

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

Eller:

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)

Med PostgreSQL 9.1+ kan du helt enkelt skriva:

GROUP  BY u.id

(som i MySQL) .. tillhandahållit id är den primära nyckeln.

Jag citerar release notes :



  1. Varför Optimizern inte använder Buffer Pool Knowledge

  2. Kontrollera en hel tabell för ett enda värde

  3. Hämta poster med JOIN-fråga

  4. CONCAT() Funktion i Oracle