PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Znalezienie unikalnych rekordów, uporządkowanych według pól w powiązaniu z PostgreSQL i Rails 3?

Zapytanie, którego szukasz, powinno wyglądać tak:

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)

Możesz dołączyć do tabeli user jeśli potrzebujesz kolumn tej tabeli w wyniku, w przeciwnym razie nie potrzebujesz ich nawet w zapytaniu.
Jeśli nie potrzebujesz min_created_at w SELECT listę, możesz ją po prostu zostawić.

Powinno być łatwe do przetłumaczenia na Ruby (w czym nie jestem dobry).

Aby uzyskać cały rekord użytkownika (jak wynika z twojego komentarza):

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

Lub:

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)

W PostgreSQL 9.1+ możesz po prostu napisać:

GROUP  BY u.id

(jak w MySQL) .. pod warunkiem id jest kluczem podstawowym.

Cytuję informacje o wydaniu :



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pobieranie daty ze znacznika czasu w PostgreSQL

  2. CURRENT_TIMESTAMP w milisekundach

  3. Zapytanie SQL, aby uzyskać listę hierarchii nadzorców. pracownik --> przełożony --> przełożony

  4. Najlepszy sposób na przechowywanie ostatniego dotkniętego czasu w Cassandra

  5. Jak wykonać zapytanie wyszukiwania na wartości kolumny zawierającej ciąg z wartościami oddzielonymi przecinkami?