获取特定日期范围SQL Server的每日平均值

获取特定日期范围SQL Server的每日平均值,sql,decimal,average,rounding,Sql,Decimal,Average,Rounding,提前谢谢 以下是我到目前为止的情况: 我正在为给定日期范围内的特定所有者按人员选择任务总量。我现在正试图得到每个人每天的任务数量的准确平均值 我遇到的问题是,它总是在平均值的末尾返回.00,而不是精确的平均值。例如,一个人一周可能有两项任务;我的平均分数是0.00,而不是0.28或0.29 SELECT convert(nvarchar, COUNT(p.personID)) AS count, CONVERT(decimal(4, 2), COUNT(p.personID) /

提前谢谢

以下是我到目前为止的情况:

我正在为给定日期范围内的特定所有者按人员选择任务总量。我现在正试图得到每个人每天的任务数量的准确平均值

我遇到的问题是,它总是在平均值的末尾返回.00,而不是精确的平均值。例如,一个人一周可能有两项任务;我的平均分数是0.00,而不是0.28或0.29

SELECT 
   convert(nvarchar, COUNT(p.personID)) AS count,
   CONVERT(decimal(4, 2), COUNT(p.personID) / DATEDIFF(DAY, @startDate, @endDate)) AS average,
   p.personID,
   p.firstname,
   p.lastname,
   c.companyname
FROM   
   Tasks t
JOIN 
   Person p ON p.personID = t.personID
JOIN 
   Client c ON c.id = p.employer
JOIN
   Commission m ON m.ClientID = c.ID
WHERE  
   t.created BETWEEN @startDate AND @endDate
   AND m.owner IN ('John Doe')
GROUP BY 
   p.personID, p.firstname, p.lastname, c.companyname
ORDER BY 
   c.companyname, count DESC

请注意,如果enddate和startdate相同,则会出现0除错误

您的问题是COUNT(p.personID)和DATEDIFF(DAY、@startDate、@endDate)都返回整数。当除以2个整数时,将得到向下舍入的第三个整数。乘以1.0得到一个十进制值

CONVERT(decimal(4,2),1.0*COUNT(p.personID)/DATEDIFF(DAY,@startDate,@endDate))

谢谢你的回答!它可以工作,当加1.0时,我还需要将其转换为十进制吗?语句“当除以2个整数时,您将得到向下舍入的第三个整数”是rdbms特有的。这对于sql server是正确的,但是对于redbrick和oracle是错误的。我测试了所有三个。因为这个问题没有任何特定数据库引擎的标签,所以我认为值得一提。