2013-08-07 89 views
1

在此先感謝!獲取日均特定日期範圍的SQL Server

這是我到目前爲止有:

我被人選擇任務總量爲給定日期範圍內特定的所有者。我現在試圖爲每個人獲得確切的每日任務平均數。

我遇到的問題是,它使平均結束返回.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 

回答

2

注意,如果結束日期和開始日期是相同的,你通過0誤差得到了分工。

你的問題是,COUNT(p.personID)和DATEDIFF(DAY,@的startDate,@結束日期)都返回整數。當除2個整數時,你會得到第三個整數向下取整。通過乘以1.0你會得到一個十進制值。

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

謝謝你的回答!它的工作原理,當我添加1.0時是否仍然需要將它轉換爲小數? – Klay

+0

聲明「當分割2個整數時得到第三個整數向下取整」是rdbms特有的。這對於s​​ql server來說是正確的,但對於redbrick和oracle來說是錯誤的。我測試了這三個。由於該問題沒有任何特定數據庫引擎的標籤,因此我認爲值得一提。 –

+0

@DanBracuk標題說sqlserver。你是對的 –