我们的 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
)并将它们从外部删除SELECT
。这样每个COUNT
人都只会包含新的 Facebook ID。这是我尝试过的:
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'
我该如何解决这个问题?谢谢。
编辑:样本数据:
timestamp--------------facebookID--------producerID-------actionID
2012-06-13 12:38:55 ******6513406 2 ax
2012-06-13 08:49:55 ******6513406 2 ax
该查询在 8 时返回 1 个唯一访问者,在 12 时返回 1 个唯一访问者。我只想在 8 时返回 1 个唯一访问者,因为在 12 时它是来自 8 的同一访问者。