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 :
Je dois récupérer la somme des MNT_1 et MNT2 de chaque ID_CLI mais du mois précédent.
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
Résultat voulu :
[j'ai essayé de chercher au niveau des requête analytique, notamment grace au 1 rows preceding mais je sèche
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.
Mon jeu de données :
Ma requête :
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);
Cela fonctionne bien sauf pour le MIN du DAT_MOIS qui ne retourne pas la valeur NULL mais la valeur SOM.
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;
Une idée ?
Merci à vous !!![]()
Partager