2012-06-21 4 views
2

Mon QuerySoustraire valeur temps sql avec une valeur de temps donnée

SELECT DATE, SEC_TO_TIME(SUM(TIME_TO_SEC( `total_hours`))) AS total 
FROM work_details 
WHERE `employee_id` = '28' 
AND DATE 
BETWEEN '2012-02-01' 
AND '2012-02-29' 
GROUP BY DATE 
ORDER BY DATE 

// qui prend le total des heures travaillées pour un employé donné en date donnée de work_details de table de base de données, total_hours est de type de temps.

Résultat

DATE total 
2012-02-01 04:19:50 
2012-02-02 07:38:21 
2012-02-06 07:43:24 
2012-02-07 07:21:36 
2012-02-08 07:38:45 
2012-02-09 06:05:22 
2012-02-10 07:28:00 
2012-02-13 07:37:38 
2012-02-14 07:37:22 
2012-02-15 07:35:10 
2012-02-16 07:29:13 
2012-02-17 07:07:23 
2012-02-20 07:40:32 
2012-02-21 07:43:32 
2012-02-22 07:36:40 
2012-02-23 07:37:57 
2012-02-24 07:35:04 
2012-02-27 09:54:02 
2012-02-28 07:41:35 
2012-02-29 04:01:11 

je dois récupérer les dates où les heures de travail au total qui sont < 4 heures, afin que je puisse compter que les jours que les feuilles de la moitié. De l'aide ??

J'ai aussi essayé cette requête, j'ai donné 8 au lieu de 4, car ma table ne contient pas de données inférieures à 4 maintenant.

SELECT DATE, SEC_TO_TIME(SUM(TIME_TO_SEC( `total_hours`))) AS total, 
CASE WHEN SEC_TO_TIME(SUM(TIME_TO_SEC( `total_hours`))) < (3600 *8) 
THEN 1 
ELSE 0 
END AS half_day 
FROM work_details 
WHERE `employee_id` = '28' 
AND DATE 
BETWEEN '2012-02-01' 
AND '2012-02-29' 
GROUP BY DATE 

Résultat

DATE total half_day 
2012-02-01 07:19:50 0 
2012-02-02 07:38:21 0 
2012-02-06 07:43:24 0 
2012-02-07 07:21:36 0 
2012-02-08 07:38:45 0 
2012-02-09 06:05:22 0 
2012-02-10 07:28:00 0 
2012-02-13 07:37:38 0 
2012-02-14 07:37:22 0 
2012-02-15 07:35:10 0 
2012-02-16 07:29:13 0 
2012-02-17 07:07:23 0 
2012-02-20 07:40:32 0 
2012-02-21 07:43:32 0 
2012-02-22 07:36:40 0 
2012-02-23 07:37:57 0 
2012-02-24 07:35:04 0 
2012-02-27 09:54:02 0 
2012-02-28 07:41:35 0 
2012-02-29 08:01:11 0 

Répondre

2

Essayez d'ajouter ceci à la fin de la requête:

HAVING HOUR(total) < 4; 
+0

me laisser vérifier, dis un :) –

+0

DATE SELECT, SEC_TO_TIME (SUM (TIME_TO_SEC (' total_hours'))) AS total FROM work_details WHERE 'employee_id' = '28' ET DATE ENTRE '2012-02-01' ET '2012-02-29' GROUPE PAR DATE ORDONNER PAR DATE AVOIR HEURE (totale) <4; c'est ce que tu voulais dire? renvoie cette erreur mais, # 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'HAVING HOUR (total) <4 LIMIT 0, 30' à la ligne 9 –

+0

Placez 'HAVING' avant le' ORDER BY', après 'GROUP BY' . –