2017-10-10 4 views
0

J'ai une requête où je calcule le temps travaillé pour chaque utilisateur.Timediff calucate où requête

$sql = " 
SELECT actief 
    , userid 
    , DATE_FORMAT(datum, '%x - %V') 
    , username 
    , min_urenperweek 
    , SEC_TO_TIME(SUM(TIME_TO_SEC(tijd_tot) - TIME_TO_SEC(tijd_van))) timediff 
    FROM " . TBL_URENREGISTRATIE . " ur 
    JOIN " . TBL_CMS_USERS . " us 
    ON us.userid = ur.userid 
GROUP 
    BY YEARWEEK(datum) 
    , userid 
ORDER 
    BY us.username ASC 
    " ; 

ce que je veux est: si le min_urenperweek permet de dire son 40 heures et le timediff est plus de 40 heures, je ne veux pas montrer si elle est inférieure à 40 alors je veux montrer

J'ai essayé Where min_urenperweek <= timediff mais il ne fonctionne pas

+0

Vous pourriez utiliser HAVING, qui vient après la clause GROUP BY – Strawberry

+0

Avez-vous peut-être un exemple comment je peux utiliser cela? – Kevin

+0

Vous pourriez donner un alias DATE_FORMAT – Strawberry

Répondre

1
  1. Vous devriez avoir les mêmes champs dans la clause GROUP BY que ceux de votre SELECT clause qui ne sont pas des fonctions d'agrégation.

  2. Vous ne pouvez pas spécifier un alias de votre clause SELECT dans votre clause WHERE.

  3. Si vous souhaitez filtrer les résultats de vos agrégats, vous ne pouvez pas le faire dans la clause WHERE, la clause HAVING existe à cet effet

Essayez quelque chose comme ça

$sql = " 
SELECT actief 
    , userid 
    , DATE_FORMAT(datum, '%x - %V') 
    , username 
    , min_urenperweek 
    , SEC_TO_TIME(SUM(TIME_TO_SEC(tijd_tot) - TIME_TO_SEC(tijd_van))) timediff 
    FROM " . TBL_URENREGISTRATIE . " ur 
    JOIN " . TBL_CMS_USERS . " us 
    ON us.userid = ur.userid 
GROUP 
    BY actief 
    , userid 
    , DATE_FORMAT(datum, '%x - %V') 
    , username 
    , min_urenperweek 
HAVING min_urenperweek <= timediff 
ORDER 
    BY us.username ASC 
    " ; 
+0

Merci cela fonctionne presque mal comprendre: D – Kevin

+1

Graag gedaan ;-) –