2013-10-30 11 views
10
私はこのクエリを行うことができるため、各グループのために最後の変更されたリソースの一覧を表示する必要が

を選択しSQLAlchemyの私はどのようにresource_group_idとlast_modified列だけを選択できますか?私が欲しいものをSQLでは、MAX、GROUP_BYとORDER_BY

はこれです:

SELECT resource_group_id, max(last_modified) AS max_1 
FROM resource GROUP BY resource_group_id ORDER BY max_1 DESC 

答えて

6
model.Session.query(
    model.Resource.resource_group_id, func.max(model.Resource.last_modified) 
).group_by(model.Resource.resource_group_id).order_by(
    func.max(model.Resource.last_modified).desc()) 
3

あなたはすでにそれを得たが、私は将来の参考のために元のクエリで何が起こっているかを説明しようとするでしょう。

SELECT resource.resource_group_id AS resource_group_id, 
     resource.extra_column1 AS extra_column1, 
     resource.extra_column2 AS extra_column2, 
     ... 
     count(resource.resource_group_id) AS max_1 
GROUP BY resource_group_id ORDER BY max_1 DESC; 

このウォン」:SQLAlchemyの中

あなたがあなたの元のクエリは次のようになりますので、それは、生成されたSQL SELECT文のリソーステーブルの各列の一覧が表示されますquery(model.Resource, ...)、モデル参照を指定した場合GROUP BYで作業します。

これを避ける一般的な方法は、クエリメソッドに明示的に選択する列を指定することです。.query(model.Resource.resource_group_id)