探しているクエリは次のようになります:
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)
テーブルuser
に参加できます 結果にそのテーブルの列が必要な場合、それ以外の場合はクエリにも必要ありません。
min_created_at
が必要ない場合 SELECT
で リスト、あなたはそれをそのままにしておくことができます。
Rubyに簡単に翻訳できるはずです(私は得意ではありません)。
ユーザー全体の記録を取得するには (私はあなたのコメントから導き出します):
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
または:
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)
PostgreSQL 9.1以降では、次のように書くことができます。
GROUP BY u.id
(MySQLのように)..提供されたid
主キーです。
リリースノート を引用します :