使用SQLAlchemy查找最新的两个元素修订

时间:2016-06-17 03:24:47

标签: python sqlalchemy

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

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

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

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

1 个答案:

答案 0 :(得分:0)

工作SQL非常多:

db.coll1.find({"arr.id":{$nin:[db.coll2.find({},"id")]}}).count()

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

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