Apa yang tampaknya Anda cari adalah DISTINCT ON ... ORDER BY
idiom di Postgresql untuk memilih terbesar-n -per-grup
hasil (N =1 ). Jadi, alih-alih mengelompokkan dan mengagregasi saja
event_list = Table.query.\
distinct(Table.name).\
filter_by(**filter_by_query).\
filter(*queries).\
order_by(Table.name, Table.timestamp.desc()).\
all()
Ini akan berakhir dengan memilih baris yang "dikelompokkan" berdasarkan nama, yang memiliki nilai stempel waktu terbesar.
Anda tidak ingin menggunakan tanda bintang hampir sepanjang waktu, tidak dalam kode aplikasi Anda, kecuali jika Anda melakukan kueri ad-hoc manual. Tanda bintang pada dasarnya adalah "semua kolom dari FROM
table/relation", yang kemudian dapat mematahkan asumsi Anda nanti, jika Anda menambahkan kolom, menyusun ulang, dan semacamnya.
Jika Anda ingin mengurutkan baris yang dihasilkan berdasarkan stempel waktu di hasil akhir, Anda dapat menggunakan misalnya Query.from_self()
untuk mengubah kueri menjadi subkueri, dan memesan dalam kueri terlampir:
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()