Những gì bạn có vẻ đang theo đuổi là DISTINCT ON ... ORDER BY
thành ngữ trong Postgresql để chọn lớn nhất-n -per-nhóm
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()