De zoekopdracht die u zoekt, zou er als volgt uit moeten zien:
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)
U kunt deelnemen aan de tabel user als je kolommen van die tabel in het resultaat nodig hebt, anders heb je het niet eens nodig voor de zoekopdracht.
Als je min_created_at niet nodig hebt in de SELECT lijst, je kunt hem gewoon weglaten.
Moet gemakkelijk te vertalen zijn naar Ruby (waar ik niet goed in ben).
Om het hele gebruikersrecord te krijgen (zoals ik afleid uit uw opmerking):
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
Of:
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)
Met PostgreSQL 9.1+ kunt u eenvoudig schrijven:
GROUP BY u.id
(zoals in MySQL) .. verstrekt id is de primaire sleutel.
Ik citeer de release-opmerkingen :