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 :