PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Qual é a maneira correta de usar distinto em (Postgres) com SqlAlchemy?


O que você parece estar procurando é o DISTINCT ON ... ORDER BY idioma no Postgresql para selecionar resultados (N =1 ). Então, em vez de agrupar e agregar apenas
event_list = Table.query.\
    distinct(Table.name).\
    filter_by(**filter_by_query).\
    filter(*queries).\
    order_by(Table.name, Table.timestamp.desc()).\
    all()

Isso acabará selecionando linhas "agrupadas" por nome, com o maior valor de carimbo de data/hora.

Você não deseja usar o asterisco na maioria das vezes, não no código do aplicativo, a menos que esteja fazendo consultas ad-hoc manuais. O asterisco é basicamente "todas as colunas do FROM table/relation", o que pode quebrar suas suposições mais tarde, se você adicionar colunas, reordená-las e tal.

Caso queira ordenar as linhas resultantes com base no timestamp no resultado final, você pode usar, por exemplo, Query.from_self() para transformar a consulta em uma subconsulta e ordenar na consulta anexa:
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()