1

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

4

0 回答 0