Bonjour,
J'ai une table TACHE (IDTACHE, DATEDEBUT, DATEFIN, IDPERSONNE)
et une table PERSONNE(IDPERSONNE, NOM)
Je souhaiterai compter le nombre de jour toute tâche confondu pour une personne...
Pourriez vous m'aider svp?
Bonjour,
J'ai une table TACHE (IDTACHE, DATEDEBUT, DATEFIN, IDPERSONNE)
et une table PERSONNE(IDPERSONNE, NOM)
Je souhaiterai compter le nombre de jour toute tâche confondu pour une personne...
Pourriez vous m'aider svp?
probablement un truc de ce genre:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT nom, SUM(datefin-datedebut) FROM tache INNER JOIN personne ON tache.idpersonne = personne.id_personne group by nom
Joli...
Par contre j'ai juste oublié une petite difficulté...
J'ai une table JOURFERIE(IDJOURFERIE, JOUR, MOIS) et il faudrait décompter ces jours du total.
Juste petite question comme ça est-ce qu'il y a un moyen de ne pas compter les jour du week end??
Implémentez une table de calendrier comme je l'ais indiqué ici : http://sqlpro.developpez.com/cours/gestiontemps/
Dès lors vous n'aurez plus qu'un comptage à faire.
A +
euh...
c'est le modèle ou la table qu'il faut implémenter?
J'aimerai quelquechose de simple svp...
Bonne soirée
La solution proposée par SQL Pro sera la meilleure, prenez le temps de la mettre en oeuvre si vous le pouvez.
Une solution qui sera peut être plus simple et plus rapide à vos yeux serait de créer une fonction qui calcule la durée entre deux dates selon vos exigences.
Par exemple, rapidement et en pl/sql (comme vous n'avez pas précisé votre sgbd, à adapter donc) :
Vous pouvez ajouter une vérification dans la boucle pour les jours fériés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 create or replace function duree ( debut date, fin date ) return number is duree number; deb date; begin if (fin <= debut) then return 0; end if; duree := fin-debut; deb := debut; while deb < fin loop if (to_number(to_char(deb,'D')) = 6 or to_number(to_char(deb,'D')) = 7) -- on retranche 1 si samedi ou dimanche then duree := duree -1; end if; deb := deb+1; end loop; return duree; end;
Vous pourrez ensuite faire quelque chose comme ça :
Mais encore une fois, la solution du calendrier est préférable (et plus simple une fois appréhendée), et vous sera sans doute utile pour beaucoup d'autres opérations par la suite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT nom, SUM(duree(datedebut,datefin)) FROM tache INNER JOIN personne ON tache.idpersonne = personne.id_personne GROUP BY nom
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager