簡體   English   中英

如何獲得DATEDIFF()的平均值?

[英]How to get the average of a DATEDIFF()?

我有以下查詢:

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

我如何從DaysBetweenExpirationAndUse列中獲取平均天數?

這應該工作正常:

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

這個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
SELECT AVG(DATEDIFF(d, DateUsed, DateExpires)) FROM tbl

應該工作正常。 請注意,由於DATEDIFF返回整數值,因此結果也將是整數。

如果要“精確”(就浮點而言)平均值,請使用

SELECT AVG(CAST(DATEDIFF(d, DateUsed, DateExpires) AS FLOAT)) FORM tbl

DATEDIFF函數與計算INT值的平均值(AVG)無關。 SQL Server的行為與其他服務器不同,但符合ANSI SQL標准

如果指定了AVG並且DT是精確數字(請注意:INT是一個精確數字),則結果的數據類型是精確數字,實現定義的精度不小於DT的精度,實現定義的小數位數不小於DT的規模。

(在我看來)在這種情況下沒有幫助。 大多數人會期望AVG(INT value)會導致NUMERIC/DECIMAL/FLOAT/REAL結果,但結果將是截斷的INT值。 解決方案是使用CONVERT(DECIMAL(p,s)/NUMERIC(p,s), ...)或簡單地乘以1.1.0將[TINY | SMALL | BIT] INT值轉換為DECIMAL/NUMERIC

例:

SELECT  ColINT, SQL_VARIANT_PROPERTY(ColINT,'BaseType') AS Col_DataType
FROM
(
    SELECT 10 AS ColINT UNION ALL SELECT 9 
) x;
/*
ColINT      Col_DataType
----------- ------------
10          int
9           int
*/

SELECT  AVG(ColINT) AS Avg#1, SQL_VARIANT_PROPERTY(AVG(ColINT),'BaseType') AS Avg#1_DataType
FROM
(
    SELECT 10 AS ColINT UNION ALL SELECT 9 
) x;
/*
Avg#1       Avg#1_DataType
----------- --------------
9           int
*/

SELECT  AVG(ColINT) AS Avg#2, SQL_VARIANT_PROPERTY(AVG(ColINT),'BaseType') AS Avg#2_DataType
FROM
(
    SELECT 10 AS ColINT UNION ALL SELECT 9
) x;
/*
Avg#2       Avg#2_DataType
----------- --------------
9           int
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM