あなたが求めているのは、 DISTINCT ON ... ORDER BY
greatest-nを選択するためのPostgresqlのイディオム-グループごと
結果( N =1 )。したがって、グループ化して集約するのではなく、
event_list = Table.query.\
distinct(Table.name).\
filter_by(**filter_by_query).\
filter(*queries).\
order_by(Table.name, Table.timestamp.desc()).\
all()
これにより、タイムスタンプ値が最大の、名前で「グループ化」された行が選択されることになります。
手動のアドホッククエリを実行している場合を除き、アプリケーションコードではなく、ほとんどの場合アスタリスクを使用したくありません。アスタリスクは基本的に「FROM
のすべての列」です。 table / Relation」。列を追加したり、列を並べ替えたりすると、後で仮定が破られる可能性があります。
最終結果のタイムスタンプに基づいて結果の行を並べ替える場合は、たとえば Query.from_self()
クエリをサブクエリに変換し、囲んでいるクエリで順序付けするには:
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()