我有一个给定时间戳和一些值的数据表,我希望得到每天的最后一个值。
在原始SQL中,我会这样做:
SELECT strftime('%Y-%m-%d', a1.created_at) AS created_at,
a1.my_value
FROM my_table a1
JOIN
(SELECT max(id) AS MAX
FROM mytable
GROUP BY strftime('%Y-%m-%d', created_at)) a2 ON a1.id = a2.MAX;
我正在使用Flask应用程序,我想使用Flask-SQLAlchemy扩展而不是 sqlalchemy.orm.session.Session 或原始SQL。定义的模型如下所示:
class MyModel(SurrogatePK, Model):
__tablename__ = 'my_table'
id = Column(db.Integer(), nullable=False, primary_key=True)
created_at = Column(db.DateTime(), nullable=False, default=dt.datetime.utcnow)
my_value = Column(db.Integer(), nullable=True)
到目前为止我所拥有的是:
外部查询:
MyModel.query.with_entities(MyModel.created_at, MyModel.my_value)...
内部查询:
MyModel.query.with_entities(func.max(MyModel.id).label('max')).group_by(func.strftime('%Y-%m-%d', MyModel.created_at))
但我无法找到将两者结合在一起以获得所需结果的方法。
答案 0 :(得分:0)
这就是我在sqlalchemy中的表现,
from sqlalchemy import literal_column
a2 = session.query(func.max(mytable.id).label("MAX"))
.group_by(func.convert(literal_column('DATE'), mytable.created_at)).subquery()
session.query(func.convert(literal_column('DATE'),
mytable.created_at).label("created_at"),
my_table.my_value).join(a2, my_table.id==a2.c.id)