sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad er den korrekte måde at bruge distinct på (Postgres) med SqlAlchemy?

Det, du ser ud til at være ude efter, er DISTINCT ON ... ORDER BY formsprog i Postgresql for at vælge resultater (N =1 ). Så i stedet for bare at gruppere og aggregere

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

Dette vil ende med at vælge rækker "grupperet" efter navn, der har den største tidsstempelværdi.

Du ønsker ikke at bruge stjernen det meste af tiden, ikke i din applikationskode alligevel, medmindre du laver manuelle ad hoc-forespørgsler. Stjernen er grundlæggende "alle kolonner fra FROM tabel/relation", som måske vil bryde dine antagelser senere, hvis du tilføjer kolonner, omorganiserer dem og sådan.

Hvis du gerne vil bestille de resulterende rækker baseret på tidsstempel i det endelige resultat, kan du f.eks. bruge Query.from_self() for at omdanne forespørgslen til en underforespørgsel, og bestille i den vedlagte forespørgsel:

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. MySQL sletning med indlejret udvalgsforespørgsel

  2. Udfør øjeblikkelig valg returnerer ingen værdier

  3. Sammenføj to borde med stand - rubin på skinner

  4. mysql, transponer/pivot række til kolonne, variabelvalg