2010-03-31 61 views
1

正在試圖返回在MySQL一週的每一天的總和,但儘管有對2010年3月MySQL的SUM查詢一週問題的每日記錄

SELECT SUM(expense_details_amount) AS total 
    FROM expense_details 
WHERE YEAR(expense_details_date) = '2010'     
    AND MONTH(expense_details_date) = '03' 
    AND WEEK(expense_details_date) = '3' 
GROUP BY DAY(expense_details_date) 

怎樣的第三週值沒有返回我去做這件事嗎?

+0

請發佈您認爲應該對結果有貢獻的那些行(值)。 – van 2010-03-31 16:53:26

回答

1

按照MySQL docsWEEK

該函數返回日期的週數。 WEEK()的雙參數形式允許您指定星期是從星期天還是星期一開始,以及返回值應該在0到53還是從1到53的範圍內。如果省略mode參數,則值使用了default_week_format系統變量。請參見第5.1.4節「服務器系統變量」。

他們的例子是:

mysql> SELECT WEEK('2008-02-20'); 
     -> 7 
mysql> SELECT WEEK('2008-02-20',0); 
     -> 7 
mysql> SELECT WEEK('2008-02-20',1); 
     -> 8 
mysql> SELECT WEEK('2008-12-31',1); 
     -> 53 

所以,你不應該檢查3周,但第3周每週的任何一年中行軍。

它看起來像這些函數返回整數而不是字符串,所以你可能想在你的查詢中失去單引號。

+0

不,那是不是這個問題。這個問題似乎與和周(expense_details_date)= 3。我已經使用這種查詢引用成功。 – davykiash 2010-03-31 16:47:12

+0

對不起,應該在發佈前檢查API文檔。它現在更新了,因爲你接受了它看起來像的答案,正如你所說,「周」是你的問題:) – 2010-03-31 16:56:33

0

您的where子句排除所有數據,因爲一年中的第三週是一月份,而且您還指定該月份爲三月份。嘗試使用其中格式的where子句:

WHERE expense_details_date BETWEEN '2010-03-15' AND '2010-03-22' 
0

WEEK()實際上象WEEKOFYEAR(),而不是WEEKOFMONTH(),所以它給值從0到53的結果,在默認情況下。

如果你說的是,本月的第一週是第7天,而不是在開始的第一個星期日,那麼你可以使用DAYOFMONTH()BETWEEN你的第三個星期才能:

SELECT SUM(expense_details_amount) AS total 
    FROM expense_details 
WHERE YEAR(expense_details_date) = 2010 
    AND MONTH(expense_details_date) = 3 
    AND DAYOFMONTH(expense_details_date) BETWEEN 15 AND 21 
GROUP BY DAYOFMONTH(expense_details_date) 

請注意,我也將常量改爲數字而不是字符串,因此MySQL不必進行轉換。

+0

賈斯汀評論給了我更多的見解,我可以做的可以寫一些邏輯,並獲得WEEKOFYEAR()。 謝謝。 – davykiash 2010-04-01 08:57:17