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 :