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

Finder du unikke poster, sorteret efter felt i forbindelse med PostgreSQL og Rails 3?

Den forespørgsel, du leder efter, skal se sådan ud:

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 deltage i tabellen user hvis du har brug for kolonner i den tabel i resultatet, ellers har du ikke engang brug for det til forespørgslen.
Hvis du ikke har brug for min_created_at i SELECT liste, kan du bare lade den ligge.

Det burde være nemt at oversætte til Ruby (hvilket jeg ikke er god til).

For at få hele brugerregistreringen (som jeg udleder af 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 blot skrive:

GROUP  BY u.id

(som i MySQL) .. angivet id er den primære nøgle.

Jeg citerer udgivelsesbemærkningerne :



  1. MySQL maksimalt hukommelsesforbrug

  2. ORA-01403:ingen data fundet for Vælg ind

  3. [A]Oracle.ManagedDataAccess.Client.OracleParameter kan ikke castes til [B]Oracle.ManagedDataAccess.Client.OracleParameter

  4. C# med Asp.net MySQL med OBDC, så login og registrering ikke fungerer