2017-02-17 96 views
1

我对每个产品Peewee/SQLite的查询7天滚动平均值

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来做到这一点?

回答

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)