2012-07-10 126 views
0

我有一個查詢,它可以提取活動客戶的數量並查找客戶活躍的總天數......我想查找此列的平均值。 ..如何在sql查詢中平均一列結果

是否有可能拉平均值並顯示它在這樣的查詢中的1行?或者這是否需要在報告方面完成?我當前的查詢是:

SELECT   
    dtCreated, bActive, dtLastUpdated, dtLastVisit, 
    DATEDIFF(d, dtCreated, dtLastUpdated) AS Difference 
FROM 
    Customers 
WHERE   
    (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-01 00:00:00', 102)) 

謝謝。

+0

平均(列) – 2012-07-10 18:54:42

+0

在查詢結果集的所有行具有相同的行數。您有三種選擇:(1)在應用程序中執行此操作; (2)將平均列添加到所有行; (3)在單獨的查詢中計算平均值。 – 2012-07-10 18:55:28

+0

我試圖在帖子前添加平均值(差異),但它表示「平均值不被識別爲內置函數」 – Shmewnix 2012-07-10 18:57:59

回答

4

使用AVG:http://msdn.microsoft.com/en-us/library/ms177677

SELECT   
    dtCreated, bActive, dtLastUpdated, dtLastVisit, 
    DATEDIFF(d, dtCreated, dtLastUpdated) AS Difference, 
    AVG(DATEDIFF(d, dtCreated, dtLastUpdated)) OVER() AS AvgDifference 
FROM 
    Customers 
WHERE   
    (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-01 00:00:00', 102)) 

更新它使用OVER():http://msdn.microsoft.com/en-us/library/ms189461.aspx

+0

如果我使用「AVG」,則列名稱無效。問題是我想要「差異」列和平均列,但平均值應該只有1個輸出。 – Shmewnix 2012-07-10 18:59:42

+0

所以你想要一個額外的列,返回所有行的平均差異?做Erica與OVER子句一起建議的內容:AVG(DATEDIFF(d,dtCreated,dtLastUpdated))OVER() – 2012-07-10 19:08:08

+0

@JustinSwartsel更有意義 - 我更新了評論以反映這種改進。 – Erica 2012-07-10 19:16:52