python - SQLAlchemy:返回按列的最大值过滤的记录

标签 python sqlalchemy

全部,我的 SQLA 请求有问题; 目标是返回计数器列中具有最大值的记录:

这工作正常 - 返回正确的记录:

m=12 # arbitrary example of a max value of counter = 12
qry = session.query(Data).
      filter(Data.user_id == user_id,Data.counter == m)

下面的代码不起作用 - 返回 None:

from sqlalchemy import func
qry = session.query(Data).
      filter(Data.user_id == user_id,
      Data.counter == func.max(Data.counter).select())

请注意,具有最大值的记录永远不会超过一个(如果相关的话)。

肯定有一种方法可以返回其中一列中具有最大值的记录。有什么想法吗?

最佳答案

听起来您可以简单地按计数器降序排序并取第一个结果...

from sqlalchemy import desc

qry = session.query(Data).filter(
      Data.user_id == user_id).order_by(
      desc(Data.counter).limit(1)

但是,如果您担心对大型数据集进行排序,您可以使用子查询...

subqry = session.query(func.max(Data.counter)).filter(Data.user_id == user_id)
qry = session.query(Data).filter(Data.user_id == user_id, Data.counter == subqry)

qry 的 sql 本质上是...

SELECT * 
FROM data 
WHERE data.user_id = :user_id AND data.counter = (
    SELECT max(data.counter) AS max_1 
    FROM data 
    WHERE data.user_id = :user_id GROUP BY data.user_id
);

关于python - SQLAlchemy:返回按列的最大值过滤的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784456/

相关文章:

python - 角度的加权平均值

python - 连接到 sqlalchemy 模型

python - 如何使用 SQLAlchemy 定义没有主键的表?

python - 基于记录数据的SqlAlchemy模型关联

python - pandas.HDFStore : How do I modify "data_columns" for an existing store? 我想向不在数据列中的列添加索引

python - 使用索引列表访问 pandas 数据框中的条目

python - SQLAlchemy - 属性错误 : _reverse_property

python - 避免在 SQLAlchemy 中解包模式

python - 无法发送 key selenium webdriver python

python - Python 中更快的计算时间