2011-07-14 71 views
1

下面是我有DATETIMEs进入和退出的表格。我想总结每个p_ID的TIMEDIFFs并将它们按p_ID分组。总结DATETIME和分组

t_ID p_ID t_IN      t_OUT 
1 1  2011-07-13 18:54:56  2011-07-13 20:16:12 
2 1  2011-07-14 09:26:56  2011-07-14 09:46:02 
3 1  2011-07-14 10:06:39  2011-07-14 10:56:31 
4 3  2011-07-14 13:07:04  2011-07-14 13:58:35 

我试过几个的MySQL命令无济于事......我的最后一次尝试是这样的:

SELECT p_ID, TIME_FORMAT(SUM(TIMEDIFF(t_OUT,t_IN)),'%H:%i') AS time FROM timeclock GROUP BY p_ID 

我猜我的命令是不是每个记录每次的p_id总结..任何帮助?

+0

愿意别人帮助我在这一个? – Andrew

回答

1

想通了:

$timeDiffReq = mysql_query("CREATE VIEW totals AS SELECT p_ID, TIME_TO_SEC(TIMEDIFF(t_OUT,t_IN)) AS time FROM timeclock"); 
$timeTotalReq = mysql_query("SELECT p_ID, SEC_TO_TIME(SUM(time)) AS timetotals FROM totals GROUP BY p_ID"); 
while($row = mysql_fetch_array($timeTotalReq)) { 
echo "<div class=\"clockInOut\"><div id=\"name\">" . $row['p_ID'] . " - " . $row['timetotals'] . "</div></div>";} 
$timeTotalDrop = mysql_query("DROP VIEW totals"); 
0

试试这个:

SELECT p_ID, 
     SUM(TIMESTAMPDIFF(HOUR, t_OUT, t_IN)) AS time 
FROM timeclock 
GROUP BY p_ID; 

这只是个小时就目前而言,尽管你可以用分钟替换它。

+0

这也没有奏效...无论如何感谢! – Andrew

0

你接近,你只需要一个两步走的方法,因为格式化需要得到SUM之后进行,否则它会在聚集的时间差异的方式。
试试这个:

SELECT p_ID, TIME_FORMAT(minutes,'%H:%i') as time 
FROM (SELECT p_ID, SUM(TIMESTAMPDIFF(MINUTE, t_OUT, t_IN)) AS minutes 
    FROM timeclock 
    GROUP BY p_ID) x; 

不确定TIME_FORMAT的格式,但此查询应接近。

+0

这没有奏效......虽然谢谢! – Andrew