【问题标题】:Most recently modified record for each user每个用户最近修改的记录
【发布时间】:2017-08-05 09:43:26
【问题描述】:

我想获取数据库中每个用户最近修改的记录,特别是使用 sqlalchemy orm。这是我正在尝试的:

session.query(Object)\
       .group_by(Object.user_id)\
       .order_by(Object.updated_at.desc())\
       .first()

但出现以下错误:

(psycopg2.ProgrammingError) column "object.id" must appear in the GROUP BY clause or be used in an aggregate function

【问题讨论】:

    标签: python postgresql orm sqlalchemy


    【解决方案1】:

    这个错误的原因是你使用了group_by 没有聚合函数。 试试这样的

    from sqlalchemy import func
    session.query(Object.user_id, func.max(Object.updated_at)).group_by(Object.user_id).all()
    

    它将返回每个用户的最后一个updated_at 值。仅当表 Object 中有多个具有相同 user_id 的记录时,使用 group_by 才有意义。

    【讨论】:

    • 是的,这是一个很好的解决方法。但是,我想返回每个用户的最后一条记录,而不仅仅是该记录发生的时间。我必须合并查询吗?
    • 我看到你使用 postgresql。在 postgresql 中,查询 select distinct on (user_id) * from table order by user_id, updated_at desc 应该可以工作。在 ORM 你可以试试session.query(Object).distinct(Object.user_id).order_by(Object.user_id, Object.updated_at.desc()).all()
    • @wotalf 有帮助吗?
    • 是的!奇迹般有效。我更新了你的答案以包含它
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 2014-11-19
    • 2021-02-25
    • 2016-07-23
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多