总而言之,我遇到了一个(令人惊讶的微不足道的)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)
Run Code Online (Sandbox Code Playgroud)
下面的代码不起作用 - 返回None:
from sqlalchemy import func
qry = session.query(Data).
filter(Data.user_id == user_id,
Data.counter == func.max(Data.counter).select())
Run Code Online (Sandbox Code Playgroud)
请注意,永远不会有多个记录具有最大值(如果相关).
当然有一种方法可以返回其中一列中具有最大值的记录.有任何想法吗?
dek*_*kim 10
听起来你可以简单地按降序排序并取第一个结果......
from sqlalchemy import desc
qry = session.query(Data).filter(
Data.user_id == user_id).order_by(
desc(Data.counter).limit(1)
Run Code Online (Sandbox Code Playgroud)
但是,如果您担心对大型数据集进行排序,则可以使用子查询...
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)
Run Code Online (Sandbox Code Playgroud)
sql qry本质上是......
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
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12258 次 |
| 最近记录: |