2016-02-08 3 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 
... 

Action столбец в таблице Views могут принимать различные значения (но не c), в Clicks таблице всегда c. Я пытался использовать JOIN с подзапросом, а затем средние результаты, но я не получил то, что ожидал.

+0

Пожалуйста, поделитесь, что вы пробовали .. – Sachin

+0

Basic это: 'выберите a.userID, a.Action, a.Time , b.Action as Action2, b.Time as Time2 from Перечисляет соединения. Представления b на Clicks.UserID = Views.UserID и 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 
Смежные вопросы