2

我有以下查询:

SELECT 
    DATEDIFF(day, DateUsed, DateExpires) AS DaysBetweenExpirationAndUse
FROM tblOffer

我怎样才能从DaysBetweenExpirationAndUse列中获得平均天数?

4

3 回答 3

10

这应该可以正常工作:

SELECT AVG(DATEDIFF(d, DateUsed, DateExpires)) AS AvgDaysBetweenExpirationAndUse 
FROM tbl

如果您想要 AVG 中的小数位:

SELECT AVG(DATEDIFF(d, DateUsed, DateExpires)*1.0) AS AvgDaysBetweenExpirationAndUse 
FROM tbl

如果您也想选择AVG和其他字段,而不分组:

SELECT *
      ,AVG(DATEDIFF(d, DateUsed, DateExpires)*1.0) OVER() AS AvgDaysBetweenExpirationAndUse 
FROM tbl
于 2013-08-30T18:41:29.053 回答
4

这个sql可以执行吗?

SELECT AVG(t.a) from
  (
    SELECT DATEDIFF(d, DateUsed, DateExpires) AS a 
    FROM tbl
  ) as t

这是我的测试:

在此处输入图像描述

但好的答案是:

SELECT AVG(DATEDIFF(d, DateOne, DateTwo)*1.0) AS avgDate
    FROM Test
于 2013-08-30T18:41:15.560 回答
1
SELECT AVG(DATEDIFF(d, DateUsed, DateExpires)) FROM tbl

应该可以正常工作。请注意,由于DATEDIFF返回一个整数值,因此结果也将是一个整数。

如果您想要“精确”(就浮点数而言)平均值,请使用

SELECT AVG(CAST(DATEDIFF(d, DateUsed, DateExpires) AS FLOAT)) FORM tbl
于 2013-08-30T18:45:25.407 回答