2012-01-02 52 views
1

我有一個包含任務列表的表。每個任務都有一個名爲「completedTime」的datetime字段。基本上每次任務被標記爲完成時,該字段用正確的時間更新。MySQl查詢優化

現在我需要爲這個結果做一個圖(使用jQuery),其中x軸是一年中的月份(jan-dec),y軸是一個數字。

什麼是sql查詢可以使用,所以它會吐出12列(1月 - 12月)與每個數字取決於有多少任務在該月有completedTime

我不想在12次或每個月以下運行查詢。

SELECT * FROM `tasks` WHERE month(completedTime) between '02' and '03'; 

任何想法?

+0

什麼是'tasks'表的結構?無論如何,它要麼是12次查詢,要麼是12次子查詢。我覺得第一個選項更可維護 – pixeline 2012-01-02 01:07:54

回答

1

如果我理解正確,您希望它返回12行(每月一個)並計算任務數。

如果這是正確的,那麼這樣的事情應該工作。我添加了可以參數化的年份。

SELECT Count(*) 
FROM Tasks 
WHERE Year = 2011 
GROUP BY Month(completedTime); 

修訂,名稱月

SELECT Count(*) as total, 
    DateName(month, DateAdd(month, Month(completedTime), 0) - 1) as Month 
FROM tasks 
WHERE year(completedTime) = '2011' 
GROUP BY Month(completedTime) 
+0

感謝提示!我知道它有什麼用做組:P 這裏是我做過什麼吧: SELECT COUNT(*)的總,月(completedTime)爲月 FROM任務 WHERE年(completedTime)=「2011 ' GROUP BY Month(completedTime) 唯一的另一個問題是,MONTH函數返回月份的數字值(例如3月份)。無論如何要讓它返回月份名稱?如果沒有,我可以在PHP中做到這一點。 再次感謝 – user1125562 2012-01-02 01:20:26

+0

也很高興顯示沒有任何爲0的月份。 – user1125562 2012-01-02 01:30:21

+0

獲取月份名稱而不是數字更改Month(completedTime)到DateName(month,DateAdd(month,Month(completedTime),0 ) - 1) – 2012-01-02 01:41:41