2017-04-26 20 views
0

アプリの使用期間の週平均を計算する必要があります(それぞれの使用には、期間がある独自のログがあります)。 問題は、1つの特定のイベントが発生する前と後の平均(各ユーザーごとに異なる)を比較したいと思うことです。 1ヶ月前の火曜日にイベントが行われた場合は、その特定の火曜日以降の火曜日から毎週の平均を計算したいと思います。次のように週別平均の開始日が異なる - postgresql

関連データが見える: EVENTS

User ID || date of event 
3fin2d..|| 19/03/17 
2f4j34..|| 20/03/17 

USAGEを

UID  || timestamp start || timestamp end  || Duration 
3fin2d.. || 11/03/17 11:20:00 || 11/03/17 12:00:00 || 00:40 
3fin2d.. || 18/03/17 11:20:00 || 18/03/17 12:00:00 || 00:40 
2f4j34.. || 19/03/17 18:20:00 || 19/03/17 18:40:00 || 00:20 
2f4j34.. || 19/03/17 19:20:00 || 19/03/17 20:00:00 || 00:40 
3fin2d.. || 19/03/17 19:30:00 || 19/03/17 20:00:00 || 00:30 
2f4j34.. || 20/03/17 19:20:00 || 20/03/17 20:00:00 || 00:40 

編集: USERS

UID  || Created On 
3fin2d.. || 11/03/17 11:00:00 
2f4j34.. || 18/03/17 13:00:00 

期待される結果:

UID  ||Average Duration before even||Average Duration After event 
3fin2d.. ||   00:40:00  || 00:30:00 
2f4j34.. ||   01:00:00  || 00:40:00 

もちろん、0週間の使用を考慮する必要があります。 上記の例では、現在の日付が20/03/17であると仮定しています(そうでなければ、より多くのゼロをカウントする必要があります)。

はあなたに

+0

をありがとうは、MySQLやPostgreSQLを使用していますか? (関与していない製品にはタグを付けないでください) – jarlh

+0

そのテーブルのデータは、どのような結果になるでしょうか?現在のクエリの試行を表示してください。 – jarlh

+0

希望の出力を表示します。 –

答えて

0

http://rextester.com/USBJ20378

select uid, 
    avg(u.duration) filter (where usage_start < e.event_date) as before, 
    avg(U.duration) filter (where usage_start >= e.event_date) as after 
from 
    usage u 
    inner join 
    events e using (uid) 
where usage_start between e.event_date - 7 and e.event_date + 7 
group by uid 
; 
    uid | before | after 
--------+----------+---------- 
2f4j34 | 00:30:00 | 00:40:00 
3fin2d | 00:40:00 | 00:30:00 
+0

ありがとう!しかし、私はおそらく私は不明であったと思う。あなたが提供したものは、1週間前と1週間後の数字だけを返します。 私はすべての週の前と週のすべての週の平均が必要です.. –

関連する問題