SQLAlchemy: как группировать по двум полям и фильтровать по дате
Итак, у меня есть таблица с меткой даты и двумя полями, которые я хочу убедиться, что они уникальны в прошлом месяце.
table.id
table.datestamp
table.field1
table.field2
в прошлом месяце не должно быть повторяющейся записи с тем же составным значением field1 + 2.
шаги в моей голове:
- группа по двум полям
- оглянитесь на данные за последний месяц, чтобы убедиться, что эта уникальная группировка не происходит.
Я получил это далеко, но я не думайте, что это работает:
result = session.query(table).group_by(
table.field1,
table.field2,
func.month(table.timestamp))
но я не уверен, как это сделать в sqlalchemy. Может ли кто-нибудь посоветовать мне?
спасибо!
1 ответов
следующее должно указывать вам в правильном направлении, Также см. встроенные комментарии:
qry = (session.query(
table.c.field1,
table.c.field2,
# #strftime* for year-month works on sqlite;
# @todo: find proper function for mysql (as in the question)
# Also it is not clear if only MONTH part is enough, so that
# May-2001 and May-2009 can be joined, or YEAR-MONTH must be used
func.strftime('%Y-%m', table.c.datestamp),
func.count(),
)
# optionally check only last 2 month data (could have partial months)
.filter(table.c.datestamp < datetime.date.today() - datetime.timedelta(60))
.group_by(
table.c.field1,
table.c.field2,
func.strftime('%Y-%m', table.c.datestamp),
)
# comment this line out to see all the groups
.having(func.count()>1)
)