Waar je naar lijkt te zoeken is de DISTINCT ON ... ORDER BY
idioom in Postgresql voor het selecteren van greatest-n -per-groep
resultaten (N =1 ). Dus in plaats van gewoon te groeperen en te aggregeren
event_list = Table.query.\
distinct(Table.name).\
filter_by(**filter_by_query).\
filter(*queries).\
order_by(Table.name, Table.timestamp.desc()).\
all()
Dit zal uiteindelijk rijen selecteren die "gegroepeerd" zijn op naam, met de grootste tijdstempelwaarde.
U wilt de asterisk meestal niet gebruiken, in ieder geval niet in uw toepassingscode, tenzij u handmatige ad-hocquery's uitvoert. De asterisk is in feite "alle kolommen van de FROM
table/relation", die uw aannames later zou kunnen breken, als u kolommen toevoegt, ze opnieuw ordent, en dergelijke.
Als u de resulterende rijen wilt ordenen op basis van tijdstempel in het uiteindelijke resultaat, kunt u bijvoorbeeld Query.from_self()
om de query om te zetten in een subquery en de bijbehorende query in te delen:
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()