Bonjour à vous tous,

Bien que nous sommes presque mi-janvier, je vous souhaite, vous lecteur de ce post une très bonne année 2013.

Mon problème est le suivant :

jVoici mon jeu de données :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
ID_CLI    DATE_MOIS        MNT_1  MNT_ 2
1        01/01/2013         10       5       
1        01/12/2012         10       5
2        01/01/2013         20       30
2        01/12/2012         20       30
Je dois récupérer la somme des MNT_1 et MNT2 de chaque ID_CLI mais du mois précédent.

Résultat voulu :
[
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
ID_CLI    DATE_MOIS        MNT_1  MNT_ 2  SOM_M1(MNT)
1        01/01/2013         10       5        35
1        01/12/2012         20       15      null 
2        01/01/2013         30       25       75 
2        01/12/2012         40       35      null 
j'ai essayé de chercher au niveau des requête analytique, notamment grace au 1 rows preceding mais je sèche .

Mon jeu de données :
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
create table test ( id_cli number(1), dat_mois date , mnt_1 number(3) , mnt_2 number(3),  som number(4));
 
insert into test (id_cli, dat_mois, mnt_1, mnt_2,som)
values
(1,'01/01/2013',10,10,20);
insert into test (id_cli, dat_mois, mnt_1, mnt_2,som)
values
(1,'01/12/2012',10,0,10);
insert into test (id_cli, dat_mois, mnt_1, mnt_2,som)
values
(1,'01/11/2012',10,5,15);
insert into test (id_cli, dat_mois, mnt_1, mnt_2,som)
values
(2,'01/01/2013',20,10,30);
insert into test (id_cli, dat_mois, mnt_1, mnt_2,som)
values
(2,'01/12/2012',30,40,70);
insert into test (id_cli, dat_mois, mnt_1, mnt_2,som)
values
(2,'01/11/2012',20,5,25);
insert into test (id_cli, dat_mois, mnt_1, mnt_2,som)
values
(2,'01/10/2012',200,500,700);
Ma requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
with somme_m1 as (select id_cli, dat_mois, mnt_1, mnt_2, som from test order by id_cli, dat_mois desc)
select id_cli, dat_mois, mnt_1,  mnt_2,som,
first_value(som) over(partition by id_cli order by dat_mois asc  rows 1 preceding) as somme_m1
from somme_m1;
from vect_fm;
Cela fonctionne bien sauf pour le MIN du DAT_MOIS qui ne retourne pas la valeur NULL mais la valeur SOM.
Une idée ?
Merci à vous !!