2013-06-04 53 views
3

我有一個現有的查詢,每天爲每個員工分配總小時數。我需要在每個員工的兩個給定日期之間獲得總小時數。所以基本上我需要總結每個員工的小時數列。 這裏是我現有的查詢,讓每天總計:如何使用mysql從子查詢中總計總和

SELECT CONCAT(pe.first, ' ', pe.last) AS Name, 
      tp.EmpID AS 'Empl ID', 
      DATE_FORMAT(tp.PunchDateTime, '%m-%d-%Y') AS 'Punch Date', 
      TRUNCATE(
       ( SUM(UNIX_TIMESTAMP(PunchDateTime) * (1 - 2 * `In-Out`)) 
      /3600), 
       2) 
       AS 'Hours Worked' 
     FROM timeclock_punchlog tp 
      LEFT JOIN 
       prempl01 pe 
      ON tp.EmpID = pe.prempl 
    WHERE  tp.PunchDateTime >= '2013-5-26' 
      AND tp.PunchDateTime < '2013-6-1' 
    GROUP BY date(PunchDateTime), EmpID 
    ORDER BY EmpID ASC 

,並讓這樣的輸出:

Name    Empl ID Punch Date Hours Worked 
TERESA A. EUBANKS 0354 05-29-2013  0.00 
TRACY D CURTIS  0364 05-28-2013  6.15 
TRACY D CURTIS  0364 05-29-2013  0.00 
KENT KADAVY   0452 05-31-2013  2.38 
JANE M SMITH  0456 05-31-2013  0.02 
JANE M SMITH  0456 05-29-2013  0.01 
JANE M SMITH  0456 05-28-2013  3.15 
CINDY JEAN ARREY 0458 05-28-2013  8.16 

基本上我想要一個查詢,將上面的輸出和顯示的總和每個員工的工作時間。我不需要顯示每天工作的時間。

謝謝! Mike

+1

這應有助於:http://dev.mysql.com/doc/refman/5.5/en/group-by-modifiers.html – CBroe

+0

加入一些SUM(),並添加一個'WEEKOFYEAR(punchdatetime)對羣組來說? –

+0

好吧,日期是任意的。他們可能會跨越數週或數天。 – dmikester1

回答

0

我正在讓它變得複雜。不需要子查詢。這是我的最終查詢來產生我想要的結果。

SELECT CONCAT(pe.first, ' ', pe.last) AS Name, 
     tp.EmpID AS 'Empl ID', 
     DATE_FORMAT(tp.PunchDateTime, '%m-%d-%Y') AS 'Punch Date', 
     TRUNCATE(
      (SUM(UNIX_TIMESTAMP(PunchDateTime) * (1 - 2 * `In-Out`))/3600), 
      3) 
      AS 'Hours Worked' 
    FROM timeclock_punchlog tp LEFT JOIN prempl01 pe ON tp.EmpID = pe.prempl 
WHERE tp.PunchDateTime >= '2013-5-1' AND tp.PunchDateTime < '2013-5-28' 
GROUP BY tp.EmpID;