根据每小时组计算统计表中的唯一用户

时间:2012-06-13 09:36:05

标签: mysql

我们有一个Facebook应用程序的统计数据库。我们的输出之一是基于时间范围的独特Facebook用户。如果我们的客户选择每日使用情况,我们会向他们展示每小时唯一Facebook用户的图表。

我的问题在于独特的价值观。首先,这是表中的相关列:

timestamp---facebookID---actionID---producerID

我目前的查询是:

SELECT HOUR(timestamp) as Hour, COUNT(DISTINCT facebookID) as Events 
FROM `e4s_analytic_data` 
WHERE actionID = 'ax' AND producerID = '2' AND timestamp BETWEEN'12-06-11 0:00:00' and '12-06-11 23:59:59'
GROUP BY HOUR(timestamp)

这会每小时为唯一身份访问者(基于facebookID)提供。但如果id = 123在14中访问,然后在17中再次访问,他将被计算两次 - 首先是14,然后是17。

为了解决这个问题,我尝试添加一个内部查询,该查询将提供早期时间内表中已有的所有ID。

我想把表中列出的所有facebookID从0(当天的开始)带到当前小时(从外面SELECT的每一行中取出)并从外面删除它们{{1 }}。这样每个SELECT只会包含新的Facebook ID。这是我尝试过的:

COUNT

但它给了我这个错误:

SELECT HOUR(timestamp) as Hour, COUNT(DISTINCT facebookID) as Events 
FROM `e4s_analytic_data` 
WHERE actionID = 'ax' AND producerID = '2' AND timestamp between '12-06-11 0:00:00' and '12-06-11 23:59:59' 
AND facebookID NOT IN
    ( SELECT facebookID FROM `e4s_analytic_data`
      WHERE actionID = 'ax' AND producerID = '2' AND    
      HOUR(timestamp) >= 0 AND HOUR(timestamp) < Hour
    )
GROUP BY HOUR(timestamp)

我该如何解决这个问题? 感谢。

编辑:示例数据:

Unknown column 'Hour' in 'where clause'

查询返回1个唯一访问者,8个,1个唯一访问者,12个。我想在8时只返回1个唯一身份,因为在12,它是来自8的同一个访问者。

0 个答案:

没有答案