获取用户的最新记录

时间:2015-06-20 05:33:18

标签: sql sqlalchemy

说我有这样的记录:

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中有办法完成它吗?感谢。

3 个答案:

答案 0 :(得分:2)

@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))
)

答案 1 :(得分:1)

对我来说,您正在寻找的SQL查询类似于:

SELECT user_id, MAX(created) FROM Table WHERE user_id IN (1, 2) GROUP BY user_id;

所以现在的交易是使用sqlalchemy来翻译它,我猜这样会有:

session.query(Table.user_id, func.max(Table.created)).filter(Table.user_id.in_([1,2])).group_by(Table.user_id).all()

http://sqlalchemy.readthedocs.org/en/rel_1_0/core/functions.html?highlight=max#sqlalchemy.sql.functions.max

答案 2 :(得分:0)

好的,我找到了一条出路,使用UIButton func addToAttributedString(attString : NSMutableAttributedString, plainString : String, font : UIFont, preferredSize : CGFloat, maxWidth : CGFloat) 功能:

subquery

以更清洁的方式,我们可以写出:

max