【问题标题】:Find latest two element revisions using SQLAlchemy使用 SQLAlchemy 查找最新的两个元素修订
【发布时间】:2016-06-20 13:09:08
【问题描述】:

我有一个表,其中包含另一个表(任务)中实体的许多修订。因此,每个 TaskRevision 行都有一个唯一的自动递增 id 和对 Task id 的引用。

我可以使用以下命令找到所有任务的最新版本:

subq = session.query(TaskRevision.task_id, func.max(TaskRevision.id).label("max_id")) \ .group_by(TaskRevision.task_id).subquery() session.query(任务)\ .join(subq, Task.id == subq.c.task_id) \ .join(TaskRevision, TaskRevision.id == subq.c.max_id) \ .with_entities(任务,TaskRevision)

如何找到最新的 2 个修订,大概是使用修订的子查询?

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    工作 SQL 差不多:

    select task_id, id from TaskRevisions where (
       select count(*) from TaskRevisions as t
       where t.task_id = TaskRevisions.task_id and t.id <= TaskRevisions.id
    ) <= 2
    

    经过大量工作,这是 SQLAlchemy 中的答案:

    tr = aliased(TaskRevision)
    q = s.query(TaskRevision.task_id, TaskRevision.id, TaskRevision.title).filter(
            s.query(func.count(tr.id)) \
                .filter(tr.id >= TaskRevision.id) \
                .filter(tr.task_id == TaskRevision.task_id) \
                .as_scalar() <= 2) \
        .order_by(TaskRevision.task_id).all()
    

    【讨论】:

      猜你喜欢
      • 2014-04-09
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多