Dotaz, který hledáte, by měl vypadat takto:
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)
Můžete se připojit k tabulce user
pokud ve výsledku potřebujete sloupce této tabulky, jinak je pro dotaz ani nepotřebujete.
Pokud nepotřebujete min_created_at
v SELECT
seznamu, můžete ho nechat.
Mělo by být snadné přeložit do Ruby (ve kterém nejsem dobrý).
Chcete-li získat celý uživatelský záznam (jak vyvozuji z vašeho komentáře):
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
Nebo:
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)
S PostgreSQL 9.1+ můžete jednoduše napsat:
GROUP BY u.id
(jako v MySQL) .. poskytnuto id
je primární klíč.
Cituji poznámky k vydání :