Wydaje się, że szukasz DISTINCT ON ... ORDER BY
idiom w Postgresql do wybierania największe-n -na grupę
wyniki (N =1 ). Więc zamiast grupować i agregować tylko
event_list = Table.query.\
distinct(Table.name).\
filter_by(**filter_by_query).\
filter(*queries).\
order_by(Table.name, Table.timestamp.desc()).\
all()
Spowoduje to wybranie wierszy „pogrupowanych” według nazwy, o największej wartości sygnatury czasowej.
Nie chcesz używać gwiazdki przez większość czasu, w każdym razie nie w kodzie aplikacji, chyba że wykonujesz ręczne zapytania ad-hoc. Gwiazdka to w zasadzie „wszystkie kolumny z FROM
tabela/relacja”, co może później złamać Twoje założenia, jeśli dodasz kolumny, zmienisz ich kolejność i tak dalej.
Jeśli chcesz uporządkować wynikowe wiersze na podstawie znacznika czasu w ostatecznym wyniku, możesz użyć na przykład Query.from_self()
aby zmienić zapytanie na podzapytanie i uporządkować w zapytaniu dołączającym:
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()