2013-12-17 1 views
0

В приведенной ниже базе данных MySQL я хотел бы проанализировать эти данные, но мои SQL-навыки подвели меня.Расчет среднего времени между событиями в плоской таблице с помощью SQL

=========================================  
activity_type email  activity_date 
email_sent  [email protected] 2013-12-01 
email_sent  [email protected] 2013-12-01 
email_sent  [email protected] 2013-12-01 
email_click [email protected] 2013-12-04 
email_click [email protected] 2013-12-05 
email_reply [email protected] 2013-12-07 
========================================= 

Использование SQL, как бы вы вычислили среднюю продолжительность времени, затраченного на электронное письмо? (Ответ: 3,5 дней. Только письма и б были кликали, и они были нажаты 3 и 4 дня, соответственно.)

ли ваш SQL запрос также позволяет рассчитать среднее время, затрачиваемое на отправку электронного письма, даже если это происходит только на примере этого события?

Заранее благодарим за помощь в супер-n00b.

+0

Вы изучали SQL [функцию AVG] (http://www.w3schools.com/sql/sql_func_avg.asp)? –

+0

Уверенный Гарри, хотя я не настолько продвинутый, чтобы манипулировать им, чтобы делать то, что я хочу. Например, я мог бы довольно легко вычислить столбец activity_date. Но как сделать это еще дальше и лишь усреднить разницу в датах, когда в первых двух столбцах существуют определенные условия, я не могу ... – brandrsn

ответ

3
SELECT avg(datediff(t2.activity_date, t1.activity_date)) 
FROM table t1 
JOIN table t2 ON t1.email = t2.email 
WHERE t1.activity_type = 'email_sent' 
    AND t2.activity_type = 'email_click' 

Чтобы рассчитать ответ времени, просто измените соответствующее поле t2.activity_type.

+0

Я не могу продвигать, но это сработало, Нильс. Благодаря! [... и спасибо за то, что заголовок моего вопроса тоже лучше.] – brandrsn

+0

Добро пожаловать, и вы можете пометить его как «Принятый ответ», нажав на галочку слева :) –

0

Прежде всего, вам нужно присоединиться к строкам отправленного события к строкам щелкнутого события. затем вычислить разницу между датами в днях, а затем вычислить среднее значение.

SELECT AVG(e2.activity_date - e.activity_date) avg_gap 
FROM email e 
JOIN email e2 on (e.email = e2.email) 
WHERE e.activity_type= 'email_sent' 
AND e2.activity_type= 'email_click' 
+0

Привет, mrras. Это также работает для меня, спасибо! – brandrsn

Смежные вопросы