sql >> Databáze >  >> RDS >> PostgreSQL

Jaký je správný způsob použití odlišných na (Postgres) s SqlAlchemy?

Zdá se, že toužíte po DISTINCT ON ... ORDER BY idiom v Postgresql pro výběr výsledky (N =1 ). Takže místo seskupování a agregace jen

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

To skončí výběrem řádků „seskupených“ podle názvu s nejvyšší hodnotou časového razítka.

Většinu času nechcete používat hvězdičku, stejně ne v kódu aplikace, pokud neprovádíte manuální ad-hoc dotazy. Hvězdička je v podstatě "všechny sloupce z FROM tabulka/vztah“, což by mohlo později narušit vaše předpoklady, pokud přidáte sloupce, změníte jejich pořadí a podobně.

V případě, že byste chtěli výsledné řádky seřadit podle časového razítka v konečném výsledku, můžete použít například Query.from_self() převést dotaz na poddotaz a objednat v přiloženém dotazu:

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



  1. Seskupování podobných řádků vedle sebe v MySQL

  2. (Android) Najděte cestu /Android v interním úložišti

  3. Postgresql fulltextové vyhledávání části slov

  4. MySQL v roce 2018:Co je ve verzi 8.0 a další pozorování