python - SQLAlchemy: return multiple values from sorting multiple columns -
i have postgres db holding data structured this:
app-type | app-version | version-number | description | number ---------|-------------|----------------|------------ |--------- android | bulls | 1.0 | apk | 100 ios | bulls | 1.0 | plist | 100 android | bulls | 1.0 | apk | 99 android | titans | 1.0 | apk | 100 ios | titans | 1.0 | plist | 100 ios | titans | 1.0 | plist | 99 android | titans | 1.0 | apk | 98 i need write sqlalchemy expression take return highest number each app-type , each app-version, data returned should this.
app-type | app-version | version-number | description | number ---------|-------------|----------------|------------ |--------- android | bulls | 1.0 | apk | 100 ios | bulls | 1.0 | plist | 100 android | titans | 1.0 | apk | 100 ios | titans | 1.0 | plist | 100 i'm having lot of trouble trying figure out how return highest number per app-type every version in app-version. appreciated here.
the query i'm working off of far
sub_query = table.query.order_by(desc(table.app_version), table.app_type, desc(table.number)) query = sub_query.group_by(table.app_version).group_by(table.id).distinct(table.app_version).all()
the simple way first find highest number per apptype/appversion (using subquery), , join main query on these results.
vi = versioninfo # alias mapped object # subquery sq = ( session .query( vi.app_type.label("app_type"), vi.app_version.label("app_version"), func.max(vi.number).label("max_number"), ) .group_by(vi.app_type, vi.app_version) ).subquery("subq") # main query q = ( session .query(vi) .join(sq, and_( vi.app_type == sq.c.app_type, vi.app_version == sq.c.app_version, vi.number == sq.c.max_number, )) ) here 1 has assume there 1 highest number per apptype/appversion combination
Comments
Post a Comment