2017-02-17 57 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)