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

Elegancka grupa PostgreSQL autorstwa Ruby on Rails / ActiveRecord

Funkcja PostgreSQL, której chcesz tutaj użyć, to DISTINCT ON . Istnieją dwa podstawowe sposoby wykonania tego zapytania przez ActiveRecord.

Pierwsza metoda to po prostu określenie :select i :order opcje. Działa to świetnie, gdy masz dość proste zapytanie bez :joins lub :include .

Post.all(
  :select => 'DISTINCT ON (date::date) *',
  :order => 'date::date DESC, created_at DESC'
)

Jeśli masz bardziej złożone zapytanie, w którym ActiveRecord generuje własny SELECT klauzula, możesz użyć podzapytania, aby wybrać rekordy docelowe.

Post.all(
  :joins => 'INNER JOIN (SELECT DISTINCT ON (date::date) id FROM posts ORDER BY date::date DESC, created_at DESC) x ON x.id = posts.id'
)

Pamiętaj, że może to być nieco wolniejsze niż pierwsza metoda, w zależności od twoich danych. Używałbym tej metody tylko w razie potrzeby. Pamiętaj, aby przeprowadzić test porównawczy z danymi podobnymi do produkcji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgres generuje tablicę za pomocą okna slajdów

  2. psycopg2.ProgrammingError:zdarzenie relacji nie istnieje

  3. AKTUALIZUJ wiele wierszy z wielu parametrów w nodejs/pg

  4. grupuj według przedziału cenowego

  5. sqlalchemy wiele kluczy obcych do tej samej tabeli