2013-06-04 52 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;