Premièrement, j'ai besoin d'une table "semaine" pour identifier les semaines possibles. Comme il n'y en a pas dans ton example je vais en faire une à partir de la table de pointage comme ceci :
select distinct semaine from pointage
ensuite je genère un enregistrement de pointage "bidon" avec zéro heures pour chacun des users.
1 2 3
| select u.id_user, p.semaine, 0 as temps
from users u,
( select distinct semaine from pointage ) p |
j'ajoute ensuite les pointages "bidon" à table requête :
1 2 3 4 5 6 7 8 9 10 11
| SELECT semaine,id_user,SUM(temps) AS totalJ
FROM (select u.id_user, p.semaine, 0 as temps
from users u,
( select distinct semaine from pointage ) p
union all
select id_user, semaine, temps from pointage
) point
WHERE semaine<42
GROUP BY id_user,semaine
HAVING totalJ<5
ORDER BY id_user |
Il y a peut-être des erreurs de syntaxe, je n'ai pas testé.
Si ta table de pointage est volumineuse, tu devras sans doute faire une table de "semaine" pour aider la performance.
Partager