2015-01-06 25 views
0

我需要计算一些工人在2014年花费的时间,并且需要按月分组(和)。 每一行应该是这样的如何按月获得总工作时间?

Worker 1 | Tot Time HH:MM:SS (Jan) | Tot Time HH:MM:SS (Feb) | etc... | Tot Time Year 
Worker 2 | Tot Time HH:MM:SS (Jan) | Tot Time HH:MM:SS (Feb) | etc... | Tot Time Year 
Worker 3 | Tot Time HH:MM:SS (Jan) | Tot Time HH:MM:SS (Feb) | etc... | Tot Time Year 

我的MySQL数据库是这样的:

id_worker (int, primary key), in_datetime (DATETIME), out_datetime (DATETIME) 

有人可以帮我吗?我只设法计算一年内的总时间。

非常感谢!

+1

其在用于行转换成列和列返回为行SQL使用透视和逆透视的场景。但不确定其在MySQL中的等价物。 –

回答

2

试试这个:

SELECT id_worker, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 1 THEN workingTime ELSE 0 END)) AS JanWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 2 THEN workingTime ELSE 0 END)) AS FebWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 3 THEN workingTime ELSE 0 END)) AS MarWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 4 THEN workingTime ELSE 0 END)) AS AprWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 5 THEN workingTime ELSE 0 END)) AS MayWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 6 THEN workingTime ELSE 0 END)) AS JunWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 7 THEN workingTime ELSE 0 END)) AS JulWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 8 THEN workingTime ELSE 0 END)) AS AugWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 9 THEN workingTime ELSE 0 END)) AS SepWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 10 THEN workingTime ELSE 0 END)) AS OctWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 11 THEN workingTime ELSE 0 END)) AS NovWorkingTime, 
     SEC_TO_TIME(SUM(CASE WHEN MonthNo = 12 THEN workingTime ELSE 0 END)) AS DecWorkingTime 
FROM (SELECT id_worker, MONTH(in_datetime) MonthNo, 
      SUM(TIMESTAMPDIFF(SECOND, in_datetime, out_datetime)) AS workingTime 
     FROM tableA 
     WHERE YEAR(in_datetime) = 2014 
     GROUP BY id_worker, MonthNo 
    ) AS A 
GROUP BY id_worker 
+0

它的工作原理!谢谢! – Drew