Zapytanie, którego szukasz, powinno wyglądać tak:
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)
Możesz dołączyć do tabeli user
jeśli potrzebujesz kolumn tej tabeli w wyniku, w przeciwnym razie nie potrzebujesz ich nawet w zapytaniu.
Jeśli nie potrzebujesz min_created_at
w SELECT
listę, możesz ją po prostu zostawić.
Powinno być łatwe do przetłumaczenia na Ruby (w czym nie jestem dobry).
Aby uzyskać cały rekord użytkownika (jak wynika z twojego komentarza):
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
Lub:
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)
W PostgreSQL 9.1+ możesz po prostu napisać:
GROUP BY u.id
(jak w MySQL) .. pod warunkiem id
jest kluczem podstawowym.
Cytuję informacje o wydaniu :