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

时间:2013-08-07 19:09:34

标签: sql decimal average rounding

提前致谢!!

这是我到目前为止所做的:

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

我遇到的问题是它在平均值的末尾不断返回.00,而不是精确的平均值。例如,一个人一周内可能有2个任务;我的平均值为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

1 个答案:

答案 0 :(得分:2)

请注意,如果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))