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

Elegant PostgreSQL Group của Ruby on Rails / ActiveRecord

Tính năng PostgreSQL bạn muốn sử dụng ở đây là DISTINCT ON . Có hai cách cơ bản để thực hiện truy vấn này qua ActiveRecord.

Phương pháp đầu tiên là chỉ cần chỉ định :select:order tùy chọn. Điều này hoạt động hiệu quả khi bạn có một truy vấn khá đơn giản không có :joins hoặc :include .

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

Nếu bạn có một truy vấn phức tạp hơn trong đó ActiveRecord tạo SELECT của riêng nó , bạn có thể sử dụng một truy vấn con để chọn các bản ghi đích.

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'
)

Lưu ý rằng điều này có thể chậm hơn một chút so với phương pháp đầu tiên tùy thuộc vào dữ liệu của bạn. Tôi sẽ chỉ sử dụng phương pháp này nếu được yêu cầu. Đảm bảo đánh giá chuẩn với dữ liệu giống sản xuất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ngày gia tăng PostgreSQL?

  2. Kết nối bộ chứa postgreSQL + postGIS docker từ mạng cục bộ của tôi

  3. Làm cách nào để pg_column_size nhỏ hơn octet_length?

  4. Psycopg2 chèn từ điển python trong cơ sở dữ liệu postgres

  5. Django - Quan hệ họ hàng không tồn tại. Không thể chạy python management.py di chuyển?