Python 不同日期的SQL/SQLAlchemy计数

Python 不同日期的SQL/SQLAlchemy计数,python,sql,sqlalchemy,sum,Python,Sql,Sqlalchemy,Sum,关于如何在SQL中使用视图或存储过程执行此操作的相同问题 我有一个销售表,简化为4列,即id、产品id、销售日期和数量。我想建立一个请求返回: 1.对于每个产品标识,按日期显示一行中的总销售额 2.在同一行中,每个id的总销售额分别为7天、15天和30天 目前,我使用多个视图,每列一个: days7=session.query(Sales.product_id,func.sum(Sales.quantity).label('count')).\ filter(Sale

关于如何在SQL中使用视图或存储过程执行此操作的相同问题

我有一个销售表,简化为4列,即id、产品id、销售日期和数量。我想建立一个请求返回: 1.对于每个产品标识,按日期显示一行中的总销售额 2.在同一行中,每个id的总销售额分别为7天、15天和30天

目前,我使用多个视图,每列一个:

days7=session.query(Sales.product_id,func.sum(Sales.quantity).label('count')).\
              filter(Sales.sale_date > now() - timedelta(days=7)).\
               group_by(Sales.product_id).cte('days7')
...
req=session.query(Sales.product_id,days7.c.count.label('days7'),\
                                 days15.c.count.label('days15'),\
                                 days30.c.count.label('days30')).\
            outerjoin(days7,days7.c.product_id==Sales.product_id).\
            outerjoin(days15,days15.c.product_id==Sales.product_id).\
            outerjoin(days30,days30.c.product_id==Sales.product_id).\
            all()
这很有效,但我不确定这是否是最好的方法。此外,如果我想为前30天(或360天)的每个日期加上计数,那就太疯狂了。这个想法可以是使用一个简单的for循环:

viewSumByDay=[]
for day in range(180):
  date=now()-timedelta(days=day)
  viewSumByDay.append(session.query(...).cte(str(date.date())))
这样可以创建视图。尽管对于左连接,使用
req=req.outerjoin(viewSumByDay[day],…)
也应该可以,但我现在仍在讨论如何使用循环将列添加到主查询中

你看到另一个很好的解决方案了吗


非常感谢你的帮助

好的,对不起,文档中描述了一个简单的
req=req.add\u列(…)


但是,如果有更漂亮的方法,我想知道。

您使用的是哪种dbms?postgresql。但在查询简单记录之后,用python计算总和似乎要高效得多。。。这正常吗?