我有一份每日会议表和每种产品的销售单位
ProductId (char) | Date | Sessions | UnitsSold
sku01 | 2017-02-01 | 21 | 4
sku01 | 2017-02-02 | 14 | 3
sku01 | 2017-02-03 | 13 | 3
sku01 | 2017-02-06 | 14 | 2
sku01 | 2017-02-07 | 5 | 1
sku01 | 2017-02-09 | 2 | 0
sku02 | 2017-02-02 | 16 | 10
sku02 | 2017-02-03 | 16 | 10
sku02 | 2017-02-14 | 30 | 23
...
我试图为每种产品生成一份报告,该报告提供会话和单位销售价值的每一天的最后7天滚动平均值
例如,sku01的输出为:
Date | SessionsRollingAvg | UnitsSoldRollingAvg
2017-02-01 | sra1 | usra1
2017-02-02 | sra2 | usra2
...
其中:
sra1 = (sum of Sessions 2017-02-01 to 2017-02-07 for sku01) / 7
usra1 = (sum of UnitsSold 2017-02-01 to 2017-02-07 for sku01) / 7
sra2 = (sum of Sessions 2017-02-02 to 2017-02-08 for sku01) / 7
usra2 = (sum of UnitsSold 2017-02-02 to 2017-02-08 for sku01) / 7
到目前为止,我发现this article提到了使用Postgres,MySQL的多种方法。但是我怎么能用Peewee ORM来做呢?
答案 0 :(得分:1)
从您的产品类开始查询,然后您可以指定连接条件以选择所需的会话。请参阅此回答Is it possible to make sql join on several fields using peewee python ORM?
然后,您可以使用fn和group_by创建平均值。
这样的内容或多或少与您文章中描述的查询匹配:
from peewee import fn
cond = (
(MySessions.product_id == MyProduct.id) &
(MySessions.date.between(7daysago, now))
)
query = (MyProduct
.select(MyProduct, fn.avg(MyTable.Sessions).alias('session_avg')
.join(MySessions, on=cond)
.group_by(MyProduct)