说我有这样的记录:
user_id user_data_field created
------- --------------- -------
1 some data date_a
2 some data date_b
1 some data date_c
1 some data date_d
2 some data date_e
我应该怎么做才能获得所有仅具有最新日期的用户记录(假设最新日期不是最底部的日期...可以在任何地方)?我正在使用一个in_
子句来获取大量用户sqlalchemy
:
session.query(Table).filter(Table.user_id.in_([1,2])).order_by(Table.created.desc())
只是按照创建的顺序对它们进行排序。而且,如果我只是在该first()
语句的末尾添加该子句,它只会给我1行。那么,我在sqlalchemy中是否有办法将其完成?谢谢。
@khan:您的解决方案几乎可以正常工作,但是该缺陷在您的答案的注释中有所描述。
下面的代码解决了这个特定问题(但仍然依赖于这样的事实,created
对于同一个,它们不会是重复的值user_id
):
subq = (
session
.query(MyTable.user_id, func.max(MyTable.created).label("max_created"))
.filter(MyTable.user_id.in_([1, 2]))
.group_by(MyTable.user_id)
.subquery()
)
q = (
session.query(MyTable)
.join(subq, and_(MyTable.user_id == subq.c.user_id,
MyTable.created == subq.c.max_created))
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句