Ce que vous semblez rechercher est le DISTINCT ON ... ORDER BY
idiome dans Postgresql pour sélectionner greatest-n -par-groupe
résultats (N =1 ). Ainsi, au lieu de regrouper et d'agréger simplement
event_list = Table.query.\
distinct(Table.name).\
filter_by(**filter_by_query).\
filter(*queries).\
order_by(Table.name, Table.timestamp.desc()).\
all()
Cela finira par sélectionner des lignes "groupées" par nom, ayant la plus grande valeur d'horodatage.
Vous ne voulez pas utiliser l'astérisque la plupart du temps, pas dans votre code d'application de toute façon, à moins que vous ne fassiez des requêtes ad hoc manuelles. L'astérisque est essentiellement "toutes les colonnes de FROM
table/relation", ce qui pourrait alors casser vos hypothèses plus tard, si vous ajoutez des colonnes, les réorganisez, etc.
Si vous souhaitez ordonner les lignes résultantes en fonction de l'horodatage dans le résultat final, vous pouvez utiliser par exemple Query.from_self()
pour transformer la requête en sous-requête et ordonner dans la requête englobante :
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()