2010-04-29 19 views
1

j'ai le tableau suivant:calculs de temps avec MySQL TIMEDIFF

mysql> SELECT id,start1,stop1,start2,stop2 FROM times; 
+----+---------------------+---------------------+---------------------+---------------------+ 
| id | start1    | stop1    | start2    | stop2    | 
+----+---------------------+---------------------+---------------------+---------------------+ 
| 4 | 2010-04-23 08:05:00 | 2010-04-23 12:15:00 | 2010-04-23 12:45:00 | 2010-04-23 16:50:00 | 
| 2 | 2010-04-26 09:30:00 | 2010-04-26 12:10:00 | 2010-04-26 12:50:00 | 2010-04-26 16:50:00 | 
| 7 | 2010-04-28 08:45:00 | 2010-04-28 11:45:00 | 2010-04-28 13:10:00 | 2010-04-28 17:29:00 | 
| 6 | 2010-04-27 09:30:00 | 2010-04-27 12:15:00 | 2010-04-27 12:55:00 | 2010-04-27 18:44:00 | 
+----+---------------------+---------------------+---------------------+---------------------+ 

Je veux résumer worktime totale et la différence aux « heures de travail nécessaires ». Cela marche plutôt bien avec l'instruction ci-dessous, mais pour des raisons inconnues cela ne fonctionne pas pour id 6. start */stop * les champs sont au format datetime.

SELECT *, TIME_FORMAT(TIMEDIFF(totaltime,'08:24'),'%H:%i') AS diff, 
totaltime > '08:24' AS redorgreen FROM 
(
SELECT 
    DATE_FORMAT(start1,'%a %e. %M %Y') AS date, 
    TIME_FORMAT(SUM(TIMEDIFF(stop1,start1) + TIMEDIFF(stop2,start2)),'%H:%i') AS totaltime, 
    TIME_FORMAT(start1,'%H:%i') AS start1, 
    TIME_FORMAT(stop1,'%H:%i') AS stop1, 
    TIME_FORMAT(start2,'%H:%i') AS start2, 
    TIME_FORMAT(stop2,'%H:%i') AS stop2, 
    id as id 
FROM times GROUP BY id ASC 
) AS somethingwedontneed; 

Ceci est le résultat:

select id, 
     TIME_FORMAT(SUM(TIMEDIFF(stop1,start1) + TIMEDIFF(stop2,start2)),'%H:%i') 
     AS totaltime from times group by id; 
+----+-----------+ 
| id | totaltime | 
+----+-----------+ 
| 2 | 06:40  | 
| 4 | 08:15  | 
| 6 | NULL  | 
| 7 | 07:19  | 
+----+-----------+ 

Merci à l'avance pour chaque indice.

+0

si vous avez une réponse? – Karthik

Répondre

4

ID SELECT, TIMEDIFF (arrêt1, démarrage1), TIMEDIFF (arrêt2, démarrage2), ADDTIME (TIMEDIFF (arrêt1, démarrage1), TIMEDIFF (arrêt2, démarrage2)), TIME_FORMAT (ADDTIME (TIMEDIFF (arrêt1, démarrage1), TIMEDIFF (stop2, START2)), '% H:% i') AS totalTime fois à partir de GROUP BY id

+0

Merci beaucoup! Cela résout parfaitement mon problème. – Oli

0

essayer de conclure '08:24' dans TIME(), qui est TIME('08:24').