我们有一个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的同一个访问者。