Bonjour,
Je ne savais pas trop comment appelé cette discussion. Merci à ceux qui sont venu malgré tout.
J'ai fait appel à vos service il y a peu de temps pour m'aider à faire une requête pour extraire les 2 dernières dates les plus récentes.
Je pensais ensuite travailler mon fichier grâce à des fonctions EXCEL mais je n'y arrive pas. Je reviens donc vers vous pour savoir si il est possible de tout faire directement en SQL.

Ci-joint, la requête je j'utilise:
Code sql : 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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
with v as (
select      C.REFERENCE as NUM_EDL
             , DECODE(A.STATUT,1,'actif',2,'en cours de modification',3,'en cours de cessation') AS STATUT_CONTRAT
             , A.DATECREATION
             , F.LIBELLE as TYPE_COMPTEUR
             , E.DATERELEVE
             , G.LIBELLE as TYPE_INDEX
			       , G.VALEUR as INDEX_CONSO
             , ROW_NUMBER() OVER (PARTITION BY C.REFERENCE, A.STATUT, A.DATECREATION, F.LIBELLE, G.LIBELLE ORDER BY E.DATERELEVE DESC) AS rn   
from
     VRP_CONTRAT                            A
     left join CONTRAT_ESPACESDELIVRAISON   B  on  B.SOURCE = A.ID
     left join VRP_ESPACEDELIVRAISON        C  on  C.ID = B.DEST
     left join VRS_CONTRAT_RELEVES          D  on  A.ID = D.SOURCE
     left join VRP_RELEVE                   E  on  D.DEST = E.ID
     left join VRS_CONFIGURATIONMATERIELLE  F  on  F.ID = E.PACM_ID
     left join VRS_GRANDEURPHYSIQUE         G  on  G.RELEVE_ID = E.ID
where A.STATUT in (1, 2, 3) 
      and F.DATEFIN is null 
      and F.LIBELLE in ('BT HP/HC Electronique', 'BT HP/HC Electromécanique') 
      and E.NATURERELEVE in (1,6,41)
      and E.STATUTRELEVE in (1, 3)  
      and lower(G.LIBELLE) like '%index nrj active%' 
      and E.DATERELEVE >=TO_DATE('01/01/2018 00:00','dd/mm/yyyy hh24:mi')
      and E.DATERELEVE <=TO_DATE('31/10/2021 00:00','dd/mm/yyyy hh24:mi')
 
and  (A.CODEGRD = 'G-EDF' or A.CODEFOURNISSEUR = 'F-EDF') and mod(A.ETATOBJET,2)=0  
and  (C.CODEGRD = 'G-EDF' or C.CODEFOURNISSEUR = 'F-EDF') and mod(C.ETATOBJET,2)=0
)
SELECT NUM_EDL, 
       STATUT_CONTRAT,
	   DATECREATION,
	   TYPE_COMPTEUR,
	   DATERELEVE,
	   TYPE_INDEX,
	   INDEX_CONSO
FROM v
WHERE rn <= 2;

J'ai mis en pièce jointe, le résultat de la requête ci-dessous et ce que je souhaite obtenir.
Si un client n'a pas 2 dates de relève, je souhaiterais qu'il apparaisse en erreur.

Je suppose que le calcul doit se faire dans le 2nd select mais comme les données sont en lignes et non en colonnes, je bug.
Il faut faire le calcul selon le type d'index et par client.exemple.xlsx