2012-07-10 49 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