PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tìm các bản ghi duy nhất, được sắp xếp theo trường liên quan, với PostgreSQL và Rails 3?

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 :



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Về lợi ích của các đường dẫn được sắp xếp

  2. Hội thảo trên web:Các tính năng mới trong PostgreSQL 11 [Theo dõi]

  3. Biến ràng buộc cho tên cột trong PHP cho truy vấn Postgresql

  4. Postgres làm ơn / pgsql LỖI:column column_name không tồn tại

  5. PostgreSQL chọn giá trị và tăng cùng một lúc