我有以下SQL语句,希望将其转换为SQLAlchemy(尽可能最佳)。
SELECT distinct u.username, u.receipt, u.expires_at, u.account_type, max(r.acctupdatetime) as lastActivity
FROM user u
JOIN radcheck c on c.username = u.username
LEFT JOIN radacct r on u.username = r.username
WHERE u.account_type != 'life'
GROUP BY u.username, u.account_type
我通过执行以下操作完成了大部分工作:
db.session.query(User, Radcheck, RadAcct)
.join(Radcheck, User.username == Radcheck.username)
.outerjoin(RadAcct, User.username == RadAcct.username)
.group_by(User.username, User.account_type)
.filter(User.account_type != AccountType.life)
.all()
但是我对如何在RadAcct.acctupdatetime上设置最大值感到困惑。
我知道语法应该是这样的:
session.query(func.max(RadAcct.acctupdatetime))
但是我该如何通过这里的连接实现呢?
表之间没有SQLAlchemy关系。用户名在所有表中都是公用的。