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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
SQL> SELECT CLIENT , ID_AAAAMM,CA
2 FROM TABLE_VENTE
3 ORDER BY 1,2;
CLIENT ID_AAA CA
---------- ------ ----------
Client1 200601 4.39
Client1 200603 49.83
Client1 200605 33.03
Client1 200608 97.41
Client1 200701 30.94
Client1 200705 91.81
Client1 200801 100
7 rows selected.
SQL> SELECT CLIENT,ANNEE,CA_M,CA_M1
2 FROM (SELECT CLIENT,MAX(SUBSTR(ID_AAAAMM,1,4))OVER(PARTITION BY CLIENT) MAX,
3 SUBSTR(ID_AAAAMM,1,4)||SUBSTR(ID_AAAAMM,5,2) ANNEE ,
4 DECODE(CA ,NULL,NULL,SUM(CA)OVER(PARTITION BY CLIENT,ID_AAAAMM))CA_M
5 , SUM(CA) OVER (PARTITION BY CLIENT ORDER BY TO_NUMBER(ID_AAAAMM)
6 RANGE BETWEEN 100 PRECEDING AND 100 PRECEDING) CA_M1
7 FROM TABLE_VENTE
8 UNION ALL
9 SELECT DISTINCT CLIENT, MAX(SUBSTR(ID_AAAAMM,1,4))OVER(PARTITION BY CLIENT) MX,
10 SUBSTR(ID_AAAAMM,1,4)+1||SUBSTR(ID_AAAAMM,5,2) ANNEE,NULL CA ,
11 SUM(CA)OVER(PARTITION BY CLIENT,ID_AAAAMM) CA_M1
12 FROM TABLE_VENTE V
13 WHERE NOT EXISTS (SELECT 1
14 FROM TABLE_VENTE T
15 WHERE T.CLIENT=V.CLIENT
16 AND TO_NUMBER(SUBSTR(V.ID_AAAAMM,1,4))=TO_NUMBER(SUBSTR(T.ID_AAAAMM,1,4))-1
17 AND SUBSTR(V.ID_AAAAMM,5,2)= SUBSTR(T.ID_AAAAMM,5,2)))
18 WHERE SUBSTR(ANNEE,1,4)<=MAX
19 ORDER BY 1,2;
CLIENT ANNEE CA_M CA_M1
---------- ------------------------------------------ ---------------------------------------- -----
Client1 200601 4.39
Client1 200603 49.83
Client1 200605 33.03
Client1 200608 97.41
Client1 200701 30.94 4.39
Client1 200703 49.83
Client1 200705 91.81 33.03
Client1 200708 97.41
Client1 200801 100 30.94
Client1 200805 91.81
10 rows selected. |
Partager