使用SQL计算平面表中事件之间的平均时间

时间:2013-12-17 09:17:34

标签: mysql sql

在下面的示例MySQL数据库中,我想分析这些数据,但我的SQL技能让我失望。

=========================================    
activity_type  email        activity_date
email_sent     a@mail.com   2013-12-01
email_sent     b@mail.com   2013-12-01
email_sent     c@mail.com   2013-12-01
email_click    a@mail.com   2013-12-04
email_click    b@mail.com   2013-12-05
email_reply    a@mail.com   2013-12-07
=========================================

使用SQL,您如何计算点击电子邮件所需的平均时间长度? (答案是3.5天。只点击了电子邮件 b ,点击了3和4几天后,分别。)

您的SQL查询是否也允许我们计算回复电子邮件所需的平均时间,即使只有这种情况发生?

提前感谢帮助超级n00b。

2 个答案:

答案 0 :(得分:4)

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字段。

答案 1 :(得分: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'