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

Cách chính xác để sử dụng khác biệt trên (Postgres) với SqlAlchemy là gì?

Những gì bạn có vẻ đang theo đuổi là DISTINCT ON ... ORDER BY thành ngữ trong Postgresql để chọn kết quả ( N =1 ). Vì vậy, thay vì chỉ nhóm và tổng hợp

event_list = Table.query.\
    distinct(Table.name).\
    filter_by(**filter_by_query).\
    filter(*queries).\
    order_by(Table.name, Table.timestamp.desc()).\
    all()

Điều này sẽ kết thúc việc chọn các hàng được "nhóm" theo tên, có giá trị dấu thời gian lớn nhất.

Bạn không muốn sử dụng dấu hoa thị hầu hết thời gian, không phải trong mã ứng dụng của bạn, trừ khi bạn đang thực hiện các truy vấn đặc biệt thủ công. Dấu hoa thị về cơ bản là "tất cả các cột từ FROM bảng / quan hệ ", có thể phá vỡ các giả định của bạn sau này, nếu bạn thêm các cột, hãy sắp xếp lại chúng, v.v.

Trong trường hợp bạn muốn sắp xếp các hàng kết quả dựa trên dấu thời gian trong kết quả cuối cùng, bạn có thể sử dụng ví dụ: Query.from_self() để chuyển truy vấn thành truy vấn con và sắp xếp thứ tự trong truy vấn kèm theo:

event_list = Table.query.\
    distinct(Table.name).\
    filter_by(**filter_by_query).\
    filter(*queries).\
    order_by(Table.name, Table.timestamp.desc()).\
    from_self().\
    order_by(Table.timestamp.desc()).\
    all()



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. THAM GIA LEFT OUTER trên cột mảng có nhiều giá trị

  2. Postgres sao chép Heroku Production DB sang DB phát triển cục bộ

  3. Chỉ chọn các hàng có một cột được thay đổi so với các hàng trước nó, được cung cấp một ID duy nhất

  4. Sử dụng docker-soạn để tạo bảng trong cơ sở dữ liệu postgresql

  5. Không thể tham gia và chọn trong Phần tiếp theo - PG ::SyntaxError