如何根据最新子项中的列筛选sqlalchemy查询



我目前有两个表,大致描述如下SQLAlchemy映射:

class Parent(Base):
    __tablename__ = "parent"
    parent_id = Column(Integer, primary_key=True)
class Child(Base):
    __tablename__ = "child"
    child_id = Column(Integer, primary_key=True)
    parent_id = Column(Interger, ForeignKey(parent.parent_id))
    child_timestamp = Column(TIMESTAMP)
    parent = relationship("Parent", backref=backref("children", order_by=child_id))

所以我有一对多的关系,从父到子。我需要做的是创建一个查询来获取所有父项目,其中他们的最新(按时间戳)子项目匹配给定的日期范围。

我不能在子表上做子查询,我按日期过滤,并在连接中使用,因为这也会考虑到旧的项目。

是否有一种方法来构建查询,只考虑到最新的子时间,或者我只需要一个额外的列在Parent上跟踪最新插入的child的child_id ?

谢谢你的帮助

首先,使用子查询获取每个父节点的最新子时间戳。然后查询父级,连接用于过滤的子查询。

sub = session.query(
    Child.parent_id,
    func.max(Child.child_timestamp).label('child_latest')
).group_by(Child.parent_id
).subquery()
parents = session.query(Parent
).join((sub, sub.c.parent_id == Parent.id)
).filter(sub.c.child_latest.between(lower_date, upper_date)
).all()

最新更新