Truy vấn bạn đang tìm kiếm sẽ giống như sau:
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)
Bạn có thể tham gia vào bảng user
nếu bạn cần các cột của bảng đó trong kết quả, nếu không, bạn thậm chí không cần nó cho truy vấn.
Nếu bạn không cần min_created_at
trong SELECT
danh sách, bạn có thể bỏ nó đi.
Sẽ dễ dàng dịch sang Ruby (mà tôi không giỏi).
Để nhận toàn bộ hồ sơ người dùng (như tôi rút ra từ nhận xét của bạn):
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
Hoặc:
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)
Với PostgreSQL 9.1+, bạn chỉ cần viết:
GROUP BY u.id
(như trong MySQL) .. được cung cấp id
là khóa chính.
Tôi trích dẫn ghi chú phát hành :