OVH Cloud OVH Cloud

calcul entre deux dates

7 réponses
Avatar
URIANE
Bonjour,
Je dois gérer un tableau d'arrêts de maladie, dans un premier temps j'ai une
table avec les noms prénoms date de début de l'arrêt, date de fin, j'ai donc
un premier calcul à faire entre la date de déb et la date de fin, je dois
ensuite rechercher les prolongations, donc pour une personne qui aura un
premier arrêt du 2/12 au 15/12 puis une prolongation du 16/12 au 21/12 par
exemple, il faut que j'arrive à regrouper les deux arrêts pour n'en faire
qu'un ou ma date de début sera le 2/12 et ma date de fin le 21/12 car on
part du principe que c'est un seul et unique arrêt, par contre si la
personne reprends son travail entre deux par exemple un nouvel arrêt qui
viendrait le 26/12 c'est considéré comme une autre maladie ......je dois au
final regrouper tous les arrêts >10 jours (en continu comme l'exemple du 1er
arrêt + la prolongation) est ce que quelq'un aurait une idée pour m'aider
dans un premier temps à faire ma requête pour le calcul entre les deux
dates, et ensuite une requête de regroupement pour les personnes dont les
arrêts seraient supérieur à 10 J comme expliqué ci-dessus ????
par avance merci

7 réponses

Avatar
Fr
Bonjour Uriane,

Si je suppose que ta table est organisée ainsi (dans mon exemple, je l'ai
appelée __test)
nom1 date_deb date_fin
toto 01/06/2006 03/06/2006
toto 10/06/2006 12/06/2006
titi 01/06/2006 25/06/2006
...

Je tenterai la logique suivante:
- (1) Calcul du nb de jours réels de maladie (somme de la durée en jours
entre dates début maladie et date fin maladie), tout arrêt confondus.
- (2) Calcul du nb de jours entre la date de début du 1er arrêt maladie
(date_min) et la date de fin du dernier arrêt de maladie.
- Si (1) est < (2) -> les arrêts de maladie durées ne sont pas consécutifs.

Voici un exemple de requête qui pourrait répondre aux pb :

SELECT [__test].id, Sum(DateDiff("d",[date_deb],[date_fin])) AS
duree_reel_arret, Count([__test].date_deb) AS nb_arret,
Min([__test].date_deb) AS mini, Max([__test].date_fin) AS maxi,
Abs(DateDiff("d",Max([__test].[date_fin]),Min([__test].[date_deb]))) AS
duree_entre_toutes_dates
FROM __test
GROUP BY [__test].id;


-> il faudra sans doute ajouter +1 aux durées calculées.
-> il restera à tester le nb de jours d'arrêt > 10

En espérant avoir donné une piste de solution...

Françoise
ENITA Bordeaux - UF Sciences pour l'Ingénieur



"URIANE" a écrit dans le message de news:

Bonjour,
Je dois gérer un tableau d'arrêts de maladie, dans un premier temps j'ai
une table avec les noms prénoms date de début de l'arrêt, date de fin,
j'ai donc un premier calcul à faire entre la date de déb et la date de
fin, je dois ensuite rechercher les prolongations, donc pour une personne
qui aura un premier arrêt du 2/12 au 15/12 puis une prolongation du 16/12
au 21/12 par exemple, il faut que j'arrive à regrouper les deux arrêts
pour n'en faire qu'un ou ma date de début sera le 2/12 et ma date de fin
le 21/12 car on part du principe que c'est un seul et unique arrêt, par
contre si la personne reprends son travail entre deux par exemple un
nouvel arrêt qui viendrait le 26/12 c'est considéré comme une autre
maladie ......je dois au final regrouper tous les arrêts >10 jours (en
continu comme l'exemple du 1er arrêt + la prolongation) est ce que
quelq'un aurait une idée pour m'aider dans un premier temps à faire ma
requête pour le calcul entre les deux dates, et ensuite une requête de
regroupement pour les personnes dont les arrêts seraient supérieur à 10 J
comme expliqué ci-dessus ????
par avance merci



Avatar
URIANE
Matricule Nom usuel de l'agent Prénom de l'agent Date de début d'arrêt
Date de fin d'arrêt Nb Jours Nb jours >10 jours
111 Machine Dominique 26/12/2005 28/12/2005 3

111 Machine Dominique 29/12/2005 31/12/2005 3

222 Bidule Frédérique 12/01/2005 23/01/2005 12 12
333 Trucmuche Daniel 10/09/2005 16/09/2005 7

333 Trucmuche Daniel 24/09/2005 03/10/2005 10

444 Lala Aurélie 10/10/2005 15/10/2005 6 6
444 Lala Aurélie 16/10/2005 22/10/2005 7 13
555 Lolo Jeannine 26/07/2005 18/08/2005 24 24
555 Lolo Jeannine 19/08/2005 19/09/2005 32 56
666 titi Pierre 20/01/2005 25/01/2005 6

666 titi Pierre 27/01/2005 31/01/2005 5


Voici mon tableau, donc je ne retiens que les arrêts supérieurs à 10 jours,
et je vérifie lorsqu'un individu à plusieurs arrêts s'ils se suivent pour
faire mon cumul... donc dans le cas ci-dessus les matricules : 111 -
333 -666 ne seront pas retenus dans la mesure ou l'arrêt est<10 et que
lorsqu'il y à deux arrêts comme c'est le cas de 666 ils ne se suivent pas,
il y a eu une reprise de travail entre les deux d'un jour donc les deux
arrêts ne sont pas cumulables on considère que c'est deux arrêts maladies
différents.Donc mon but est le calcul entre deux dates, puis la recherche de
dates qui se suivent pour faire mon cumul de jours pour au final obtnir la
liste de tous les arrêts sur l'année 2005 >10 jours consécutifs.
Merci
Avatar
Fr
Dans ma table, je n'enregistre pas la durée de la maladie. Je la fais
calculer dans la requête.

J'ai modifié la requête que je t'avais envoyée. Elle doit compter le bon nb
de jours d'absence et afficher si les dates de maladie sont consécutives ou
non.
Il suffit ensuite de prendre les enregistrements pour lesquels la
"duree_reel_arret" > 10 ET consecutif = "consecutif"

Voici la requête :
SELECT [__test].id, Sum(DateDiff("d",[date_deb],[date_fin])+1) AS
duree_reel_arret, Count([__test].date_deb) AS nb_arret,
Min([__test].date_deb) AS mini, Max([__test].date_fin) AS maxi,
Abs(DateDiff("d",Max([__test].[date_fin]),Min([__test].[date_deb])))+1 AS
duree_entre_toutes_dates,
IIf((Abs(DateDiff("d",Max([__test].[date_fin]),Min([__test].[date_deb])))+1)>(Abs(Sum(DateDiff("d",[date_deb],[date_fin])+1))),"non
consecutif","consecutif") AS consecutif
FROM __test
GROUP BY [__test].id;

Voilà. Bon courage pour la suite.

Françoise



"URIANE" a écrit dans le message de news:

Matricule Nom usuel de l'agent Prénom de l'agent Date de début d'arrêt
Date de fin d'arrêt Nb Jours Nb jours >10 jours
111 Machine Dominique 26/12/2005 28/12/2005 3

111 Machine Dominique 29/12/2005 31/12/2005 3

222 Bidule Frédérique 12/01/2005 23/01/2005 12 12
333 Trucmuche Daniel 10/09/2005 16/09/2005 7

333 Trucmuche Daniel 24/09/2005 03/10/2005 10

444 Lala Aurélie 10/10/2005 15/10/2005 6 6
444 Lala Aurélie 16/10/2005 22/10/2005 7 13
555 Lolo Jeannine 26/07/2005 18/08/2005 24 24
555 Lolo Jeannine 19/08/2005 19/09/2005 32 56
666 titi Pierre 20/01/2005 25/01/2005 6

666 titi Pierre 27/01/2005 31/01/2005 5


Voici mon tableau, donc je ne retiens que les arrêts supérieurs à 10
jours, et je vérifie lorsqu'un individu à plusieurs arrêts s'ils se
suivent pour faire mon cumul... donc dans le cas ci-dessus les matricules
: 111 - 333 -666 ne seront pas retenus dans la mesure ou l'arrêt est<10 et
que lorsqu'il y à deux arrêts comme c'est le cas de 666 ils ne se suivent
pas, il y a eu une reprise de travail entre les deux d'un jour donc les
deux arrêts ne sont pas cumulables on considère que c'est deux arrêts
maladies différents.Donc mon but est le calcul entre deux dates, puis la
recherche de dates qui se suivent pour faire mon cumul de jours pour au
final obtnir la liste de tous les arrêts sur l'année 2005 >10 jours
consécutifs.
Merci



Avatar
URIANE
Merci Françoise
Avatar
URIANE
Bonjour Françoise,
J'ai exploité ta requête, mais je trouve qq anomalies, donc en partant de ce
que tu m'as indiqué j'essaie de décortiquer le code SQL afin de bien
comprendre, pourrais tu me dire en SQL ce que je devrais écrire pour
sélectionner les dates qui se suivent et exclure toutes les lignes dont la
date début n'est pas la date de fin +1 de l'enregistrement suivant ??
Merci
Avatar
URIANE
Encore moi, je m'excuse je vais être un peu plus clair, en exploitant la
requête j'ai trouvé l'anomalie suivante; pour un individu qui est en arrêt
du 12/01/05 au 23/01/05 soit 12 jours, puis de nouveau du 21/03/05 au
26/03/05 la requête va me cumuler les deux arrêts, ce qui n'est pas exact
puisqu'ils ne se suivent pas, elle va également me dire qu'ils ne sont pas
consécutif ce qui est vrai, mais comme le premier est >10j je devrais tout
de même le garder, mais dans ce cas il n'apparait pas ???, en fait ce que je
souhaite c'est le cumul des arrêts qui se suivent et >10
jours.....consécutifs et non consécutifs du moment qu'ils sont supérieurs à
10 j
Par avance merci
cordialement
Avatar
alylaye
Le lundi 04 Décembre 2006 à 17:01 par URIANE :
Encore moi, je m'excuse je vais être un peu plus clair, en exploitant la
requête j'ai trouvé l'anomalie suivante; pour un individu qui est
en arrêt
du 12/01/05 au 23/01/05 soit 12 jours, puis de nouveau du 21/03/05 au
26/03/05 la requête va me cumuler les deux arrêts, ce qui n'est pas
exact
puisqu'ils ne se suivent pas, elle va également me dire qu'ils ne sont
pas
consécutif ce qui est vrai, mais comme le premier est >10j je devrais
tout
de même le garder, mais dans ce cas il n'apparait pas ???, en fait ce que
je
souhaite c'est le cumul des arrêts qui se suivent et >10
jours.....consécutifs et non consécutifs du moment qu'ils sont
supérieurs à
10 j
Par avance merci
cordialement
Bonjour URIANE , j'ai actuellement la même demande je traite un sujet sur l’absentéisme la solution a ton problème répondra a mon besoins , as-tu trouvé la solution a ton problème si oui , peut-tu me faire voir ta requête stp