sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cuál es la forma correcta de usar distintos en (Postgres) con SqlAlchemy?

Lo que parece estar buscando es el DISTINCT ON ... ORDER BY modismo en Postgresql para seleccionar resultados (N =1 ). Entonces, en lugar de agrupar y agregar solo

event_list = Table.query.\
    distinct(Table.name).\
    filter_by(**filter_by_query).\
    filter(*queries).\
    order_by(Table.name, Table.timestamp.desc()).\
    all()

Esto terminará seleccionando filas "agrupadas" por nombre, con el mayor valor de marca de tiempo.

No desea utilizar el asterisco la mayor parte del tiempo, no en el código de su aplicación de todos modos, a menos que esté realizando consultas ad-hoc manuales. El asterisco es básicamente "todas las columnas de FROM tabla/relación", lo que podría romper sus suposiciones más adelante, si agrega columnas, las reordena y tal.

En caso de que desee ordenar las filas resultantes según la marca de tiempo en el resultado final, puede usar, por ejemplo, Query.from_self() para convertir la consulta en una subconsulta y ordenar en la consulta adjunta:

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()