2012-10-04 156 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