Подведение итогов и группировка - PullRequest
1 голос
/ 15 июля 2011

Вот таблица, у меня есть DATETIME и выход. Я хотел бы суммировать TIMEDIFF по p_ID и сгруппировать их по p_ID.

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 ... Любая помощь?

Ответы [ 3 ]

1 голос
/ 17 июля 2011

Разобрался:

$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 голосов
/ 15 июля 2011

Вы были близки, вам просто нужен двухэтапный подход, потому что форматирование необходимо выполнить после получения 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 голосов
/ 15 июля 2011

Попробуйте это:

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

Пока только часы, но вы можете заменить его на МИНУТЫ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...