У меня есть следующий оператор 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.Имя пользователя является общим для всех таблиц.