Kueri yang Anda cari akan terlihat seperti ini:
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)
Anda dapat bergabung di tabel user
jika Anda membutuhkan kolom tabel itu dalam hasil, jika tidak, Anda bahkan tidak memerlukannya untuk kueri.
Jika Anda tidak memerlukan min_created_at
di SELECT
daftar, Anda bisa meninggalkannya.
Seharusnya mudah untuk menerjemahkan ke Ruby (yang saya tidak pandai).
Untuk mendapatkan seluruh catatan pengguna (seperti yang saya dapatkan dari komentar Anda):
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
Atau:
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)
Dengan PostgreSQL 9.1+ Anda cukup menulis:
GROUP BY u.id
(seperti di MySQL) .. disediakan id
adalah kunci utama.
Saya mengutip catatan rilis :