2017-02-17 18 views
1

のために私は最後の7日間が転がり与え、各製品のレポートを生成しようとしているピーウィー/ 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 
... 

各製品の販売毎日のセッションやユニットのテーブルを持っています値

販売セッションおよびユニットの毎日の平均は、したがって、例えば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) 
関連する問題