【问题标题】:SQLAlchemy Order By before Group By分组依据之前的 SQLAlchemy 排序依据
【发布时间】:2014-04-23 12:50:30
【问题描述】:

我已经研究了很多关于在group by 之前执行order by 的查询,并找到了raw SQL 方面的大多数答案。但是,我想在SQLAlchemy Code 中看到解决方案。

  1. 我最初的幼稚解决方案如下:

    session.query(MyTable).order_by(timestamp).group_by(begin_date)
    

    不幸的是,这会导致表格首先被分组然后排序,这不会返回我所期望的。

  2. 第二,我试过了:

     stmt = session.query(MyTable).order_by(timestamp)
     session.query(stmt).group_by(begin_date)
    

    这会返回正确的结果,但是,结果是KeyedTuples,而出于向后兼容性的原因,我实际上希望拥有 MyTable 对象。

我怎样才能做到这一点?

【问题讨论】:

  • 对于我使用过的每个数据库引擎,在 group by 之前进行 order by 都会引发错误。你找到了什么答案?
  • 您能展示一下您尝试生成的 SQL 吗?你可能想要... group by begin_date order by begin_date, timestamp
  • 我想通了,但无法发布我自己的问题的答案,所以这是答案:stmt = session.query(MyTable).order_by(timestamp); session.query().add_entity(MyTable, alias=stmt).group_by(begin_date);

标签: python sql sqlalchemy


【解决方案1】:

原始问题的最新评论中的代码似乎仍然存在一些问题。这是一个工作版本:

stmt = session.query(MyTable).order_by(timestamp).subquery()
session.query().add_entity(MyTable, alias=stmt).group_by(begin_date);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多