2016-02-08 23 views
0

我有包含關於每個用戶觀看和點擊廣告信息的兩個表:如何在點擊廣告前獲得平均觀看次數?

點擊

userID Action Time 
123  c  2016-01-08 01:57:00 
123  c  2016-01-11 03:17:12 
200  c  2016-01-09 02:20:10 
332  c  2016-01-12 07:07:07 

瀏覽

userID Action Time 
123  0  2016-01-07 01:33:00 
123  0  2016-01-10 04:12:13 
200  w  2016-01-08 02:20:10 
332  0  2016-01-09 07:07:07 
332  0  2016-01-10 07:07:07 
332  0  2016-01-11 07:07:07 

我想知道第一次點擊廣告前,第二次點擊廣告的平均觀看次數等等。從上面的例子中可以看出: 用戶123以前只有一個視圖時第一次點擊,用戶200也是,並且用戶332在第一次點擊之前有三個視圖。所以第一次點擊的平均值是(1+1+3)/3=1.67。只有用戶123點擊兩次後,兩個視圖(總計)。

我想要的結果看起來是這樣的:

Nr_clicks Avg_views 
1   1.67 
2   2 
... 

Views表中的列Action可以採取不同的值(但不c),在Clicks表始終c。我試圖用JOIN與子查詢,然後平均結果,但我沒有得到我的預期。

+0

請分享你已經嘗試了什麼.. – Sachin

+0

基本是這樣的:'選擇a.userID,a.Action,a.Time ,b.Action作爲Action2,b.Time作爲Time2從 在Clicks.UserID = Views.UserID和 上點擊加入Views b。b.Time Maju116

回答

0

好吧,這把我一些時間,但我覺得它工作得很好:

select clickcume nr_clicks, avg(view_b) avg_view_before from(
select userid, clickcume, max(viewcume) view_b from(
select a.*, b.time_v, b.viewcume from 
(
    select userid, time as time_c, 
     count(*) over (partition by userid order by time) as clickcume 
    from views) a join 
(
    select userid, time as time_v, 
     count(*) over (partition by userid order by time) as viewcume 
    from clicks) b 
    on (a.userid=b.userid) 
where time_c>=time_v) c 
group by userid, clickcume) d 
group by clickcume 
相關問題