Bonjour,

Je m'arrache les cheveux depuis plusieurs jours pour trouver une solution au problème que je vais vous présenter.

Je souhaite reconstituer les périodes d'absences des salariés.

Ma table T2 :

id -> identifiant du salarié
date_abs -> jour d'absence
code_abs -> motif de l'absence

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
id ; date_abs ; code_abs 
1  ; 20130101 ; 101
1  ; 20130102 ; 101 
1  ; 20130103 ; 101
1  ; 20130201 ; 145 
1  ; 20130202 ; 145 
1  ; 20130203 ; 145 
1  ; 20130204 ; 145 
2  ; 20130101 ; 101
2  ; 20130102 ; 101
J'ai cherché un peu partout ; j'ai trouvé un peu d'aide mais mon résultat est toujours faux.

Voici mon code :

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
SELECT         
    id, 
    min(date_abs) AS dtdeb, 
    MAX(date_abs) AS dtfin, 
    code_abs, 
    COUNT(*)  AS nbjr
FROM 
(
    SELECT 
        id, 
        date_abs, 
        code_abs, 
        ROW_NUMBER() over(ORDER BY date_abs ASC) - ROW_NUMBER() over(partition BY code_abs ORDER BY date_abs ASC) AS grp
    FROM t2
)
 
GROUP BY    
    id, 
    code_abs, 
    grp
ORDER BY 
    id, 
    dtdeb
Je voudrais reconstituer la période d'absence avec une date de début et une date de fin par salarié et motif d'absence. Exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
id; dtdeb;dtfin;code_abs
1;20130101;20130103;101
Je vous remercie d'avance de m'apporter votre aide.