sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad är det korrekta sättet att använda distinct på (Postgres) med SqlAlchemy?

Det du verkar vara ute efter är DISTINCT ON ... ORDER BY idiom i Postgresql för att välja resultat (N =1 ). Så istället för att bara gruppera och aggregera

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

Detta kommer att sluta välja rader "grupperade" efter namn, med det största tidsstämpelvärdet.

Du vill inte använda asterisken för det mesta, inte i din applikationskod i alla fall, om du inte gör manuella ad-hoc-frågor. Asterisken är i princip "alla kolumner från FROM tabell/relation", som sedan kan bryta dina antaganden senare, om du lägger till kolumner, ordnar om dem och så.

Om du skulle vilja beställa de resulterande raderna baserat på tidsstämpeln i det slutliga resultatet, kan du till exempel använda Query.from_self() för att vända frågan till en underfråga och beställa i den bifogade frågan:

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. jboss 7 oracle datakälla konfiguration

  2. Samla schemastatistik med FND_STATS i EBS 11i och R12

  3. Letar efter datauppsättning att testa sökningar i FULLTEXT-stil på

  4. Få en ny beställning efter limit