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 :