2012-10-04 119 views
1

我做了MSSQL查询,可以计算过去30天的总唯一IP地址和总IP记录。MS SQL查询来计算平均每月唯一访问者

SELECT count(IPAddress) AS totalPageHits, count(DISTINCT IPAddress) AS totalVisitors, count(DateTime) 
FROM recordTable 
WHERE DateTime > GETDATE()-30 

现在我很难计算平均每日页面点击数和平均每日独特访客。 我试图使用AVG,但它给了我一个错误消息,说“操作数数据类型varchar对于avg运算符无效”。
任何帮助,非常感谢。

+1

你需要组上适当的日期间隔... –

+0

'VARCHAR'数据类型不能进行平均,你需要使用'int'或'bigint' –

回答

3
SELECT AVG(HitCount) as AverageHits, 
    AVG(UniqueHitCount) As AverageUniqueHits 
FROM 
(
SELECT COUNT(IPAddress) as HitCount, 
     COUNT(DISTINCT IPAddress) as UniqueHitCount, 
     DATEDIFF(d, GETDATE(), DateTime) as Day 
FROM tblHitCounter 
WHERE DateTime > GETDATE() - 30 
GROUP BY DATEDIFF(d, GETDATE(), DateTime) 
) sub 
+0

它的工作!非常感谢你的帮助。 Iv花了好几个小时试图谷歌它并把这件事情弄清楚。 – crashtestxxx

+1

我很高兴为你工作......这些年来,我不得不做很多SQL报告:D – BlakeH

2

你需要一天该组,然后做的平均值:

select avg(totalPageHits) as avgDailyTotalPageHits, 
     avg(totalVisitors) as avgDailyTotalVisitors 
from (SELECT cast(DateTime as date) as thedate, 
      count(IPAddress) AS totalPageHits, 
      count(DISTINCT IPAddress) AS totalVisitors, count(DateTime) as cnt 
     FROM recordTable 
     WHERE DateTime > GETDATE()-30 
     group by cast(DateTime as date) 
    ) t 
+0

你的答案是正确的 - 我有一个脑屁:avg(count(...))总是等于那个数字,如果有效的话。聚合函数不能嵌套。 – BryanH

+0

你能不能请告诉我什么是{t}。因为我收到一条错误消息,提示“没有为't'的第4列指定列名称。”感谢您的帮助。 – crashtestxxx

+0

@GordonLinoff - (你对现在被删除的答案进行评论..)Fyi,ColdFusion只是把SQL移交给你的数据库。所以受支持的操作与往常一样依赖于数据库类型和驱动程序 – Leigh