PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Намиране на уникални записи, подредени по поле във връзка с PostgreSQL и Rails 3?

Заявката, която търсите, трябва да изглежда така:

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 е първичният ключ.

Цитирам бележките по изданието :



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Persistence.createEntityManagerFactory() отнема много време, за да се върне

  2. Могат ли препратките към външни ключове да съдържат NULL стойности в PostgreSQL?

  3. Създайте PostgreSQL база данни в движение, като използвате Hibernate, дори ако DB не съществува

  4. Ограничения за имена на колони в таблицата Postgres?

  5. Търсене на модел в даден ценови диапазон в различни валути