SQLAlchemy编写嵌套查询

时间:2015-07-18 00:46:18

标签: python mysql sqlalchemy

我有两张桌子:

table A

id | values

table B

id | foreign key to A | datestamp | val2

鉴于id的{​​{1}}列表,我如何得到AA的加入结果,只包含来自B的行每个匹配的B最早datestamp

例如表B可以有:

A

我只对行

感兴趣
1 | 2 | 1/10/2015
1 | 2 | 1/2/2015
1 | 2 | 1/3/2015

根据我在SQL中的理解,您可以执行类似

的操作
id_A | id_B | 1/2/2015 | values | val2

但是,如何在SQLAlchemy查询中嵌入此选择?

例如,我相信我不能只使用

where timestamp = (select min(timestamp) from B.X where x.id = b.id)

1 个答案:

答案 0 :(得分:3)

实际上,你可以使用:

B2 = aliased(B, name='b2')
s = session.query(func.min(B2.datestamp)).filter(B2.a_id == A.id)
q = (session
     .query(A.id, B.id, B.datestamp, A.values, B.val2)
     .join(B)
     .filter(B.datestamp == s)
     )
相关问题