Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour
Dans un script je souhaite recupérer la 2ème valeur la plus grande d'une liste de valeur
Equivalent Excel : Grande.Valeur(Val1:Val2:Val3;Val4
Load CLE, Val1, Val2, Val3, Val4, plusgrandevaleur(Val1, Val2, Val3, Val4, 2)
Merci d'avance
Jacques
J'ai vu la proposition dans Max value of variables or an array
=RangeMax(If(RangeMax(vA, vB, vC) = vA, 0, vA), If(RangeMax(vA, vB, vC) = vB, 0, vB), If(RangeMax(vA, vB, vC) = vC, 0, vC))
Mais cela ne répond pas complètement pour les cas ou il y a 2 fois la même valeur max
Exemple :
8, 9, 9 : attendu 9 et non 8
7, 7, 6 : attendu 7 et non 6
6, 5, 6 : attendu 6 et non 5
Bonjour,
peut-être la fonction Firstsortedvalue ?
@+
En ajoutant un test pour identifier les cas ou la valeur max existe plus d'une fois :
=if(SubStringCount('|'&vA&'|'&vB&'|'&vC&'|', '|'&RangeMax(vA, vB, vC)&'|') > 1,
RangeMax(vA, vB, vC),
RangeMax(If(RangeMax(vA, vB, vC) = vA, 0, vA), If(RangeMax(vA, vB, vC) = vB, 0, vB), If(RangeMax(vA, vB, vC) = vC, 0, vC))
)
Ou alors de cette manière :
J'ai essayé avec la fonction Max(Value, 2), mais ça ne retournait pas ce que tu voulais
//Chargement de tes données
Data:
Directory;
LOAD CLE,
Val1, Val2, Val3, Val4
FROM Data.xlsx (ooxml, embedded labels, table is Feuil1);
//------------------------------------------------
//Traitement pour déterminer le second plus grand
//------------------------------------------------
Data_tmp:
CrossTable(ValName, Value)
LOAD CLE,
Val1, Val2, Val3, Val4
Resident Data;
Left Join(Data)
LOAD CLE,
// max(Value, 2) as SecondePlusGrandeValeur
SubField(Concat(Value, ',', Value), ',', -2) as SecondePlusGrandeValeur
Resident Data_tmp
Group by CLE;
DROP Table Data_tmp;
//------------------------------------------------
Bonjour,
J'ai réglé mon problème en cas de valeur identique en ajoutant dans la formule 0,1, 0,01 et 0,001 a VAL1, VAL2 et VAL3
RangeMax(vA +0,1, vB +0,01, vC +0,001) = vA +0,1....