2016-12-08 134 views
1

您好我正在嘗試實現查詢從DB與小時和日期我可以選擇某些部門的所有小時的總和,在某一年。爲特定用戶選擇特定月份和年份的小時數

表例子如下:

enter image description here

到目前爲止,這我生成的查詢如下:

SELECT t.clientid, t.date, t.department, t.time, 
         (SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) FROM time_management WHERE YEAR(t.date)='$year' AND MONTH(t.date)= 12 GROUP BY t.clientid) as january, 
         (SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) FROM time_management WHERE YEAR(t.date)='$year' AND MONTH(t.date)= 2 GROUP BY t.clientid) as february 
         FROM time_management t GROUP by t.clientid 

我想這個做的是所有的選擇和小時爲2016年1月份。在當前狀態下,我得到所有客戶的所有小時總和的結果,並且我希望客戶得到客戶的結果:

目前的結果是:

enter image description here

因此,我正在尋找的是如何獲取時間的總和結果通過clientid分組,並得到2個結果不僅之一。這兩個客戶端ID的總和。爲他們每個人獨立地總結?

任何幫助將非常感激。謝謝!

回答

0

你應該能夠做到這一點,而不子查詢 -

SELECT `date`, `department`, SUM(`time`) 
    FROM `time_management` 
    WHERE YEAR(`date`)='$year' AND MONTH(`date`)= 12 
    GROUP BY `client_id` 

我建議你保存你在幾秒鐘內數據庫的時間 - 它需要顯示爲小時和分鐘是當它格式化爲唯一的一次在客戶端的屏幕上顯示。如果你確實把它作爲字符串存儲,你將不得不把所有的轉換東西放回去。

看着它,我還建議將你的年份和月份存儲爲單獨的列,或者作爲基於模式:201612,或許,或者類似的東西。這將清理你的where子句。

+0

這看起來像一個非常好的解決方案,我使用子查詢的原因是將其定義爲月,以防萬一如果我必須傾銷2個月或更多像1月,2月等。 –