Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 24/11/2012 21:54:37
- damalaan
- Membre
classement avec rattrapage
Bonjour,
J'ai le code suivant qui me renvoie un classement de produit en fonction d'une moyenne
représentant le nombre de defaut
with
moy as (select res_ligne, res_prod, to_char(res_date, 'YYYYMM') as mois, exp(avg(ln(res_defaut))) as moy_geo
from tbl_resultat_res
group by res_ligne, res_prod, to_char(res_date, 'YYYYMM')),
class as(
select res_ligne, res_prod, mois, moy_geo,
case
when moy_geo <=1250 then 'A'
when moy_geo > 1250 and moy_geo <= 1500 then 'B'
when moy_geo > 1500 and moy_geo <= 1750 then 'C'
when moy_geo > 1750 and moy_geo <= 2000 then 'D'
else 'E'
end as class
from moy)
select * from class
;
maintenant je voudrais introduire un système de rattrapage du genre :
soit : si un produit est classé en B C D ou E et si sur les 3 derniers mois 7 comptages de defaut sur 9
sont inférieur à 1250 alors je le surclasse c'est à dire que qu'un B je le passe en A, un C en B, etc
soit je prends comme seuil de rattrapage glissant :
pour passer de B en A ==>7 résultats <=1250
de C en B ==> 7 résultats <=1500
de D en C==> 7 résultats <=1750
de E en D ==> 7 résultats <= 2000
je ne me suis pas encore décidé sur le mode de rattrapage, mais là je bloque sur les 2!
Voici un exemple de données avec une seuil fixe à 1250
ligne produit date defaut moy classement
ligneA 993001 07/02/11 00:00 1710
ligneA 993001 18/02/11 00:00 1687
ligneA 993001 23/02/11 00:00 1249 1533.055498 B
ligneA 993001 07/03/11 00:00 1334
ligneA 993001 18/03/11 00:00 728
ligneA 993001 23/03/11 00:00 954 974.8666074 A
ligneA 993001 06/04/11 00:00 856
ligneA 993001 15/04/11 00:00 1005
ligneA 993001 27/04/11 00:00 934 929.6701802 A
ligneA 993001 04/05/11 00:00 974
ligneA 993001 13/05/11 00:00 989
ligneA 993001 26/05/11 00:00 1111 1022.876268 A
ligneA 993001 07/06/11 00:00 1167
ligneA 993001 13/06/11 00:00 1212
ligneA 993001 29/06/11 00:00 1400 1255.742242 B==>A
le dernier est rattrapable car sa moyenne est supérieure au seuil, mais sur les 9 resultats de comptage des mois précedent le calcul de la moyenne, aucun n'est supérieure à 1250
Dernière modification par damalaan (27/11/2012 14:34:49)
Hors ligne
#2 05/12/2012 14:42:08
- damalaan
- Membre
Re : classement avec rattrapage
Je me réponds à moi même , non pas que j'ai trouvé la solution hélas mais pour corriger une erreur dans le jeu de donnée en exemple
Concernant les 9 dernières valeurs (sur mars avril et mai), pour que mon exemple fonctionne je remplace le 1334 du 07/03 par 1247.
Voici un exemple de données avec une seuil fixe à 1250
ligne produit date defaut moy classement
ligneA 993001 07/02/11 00:00 1710
ligneA 993001 18/02/11 00:00 1687
ligneA 993001 23/02/11 00:00 1249 1533.055498 B
ligneA 993001 07/03/11 00:00 1247
ligneA 993001 18/03/11 00:00 728
ligneA 993001 23/03/11 00:00 954 966.1131897 A
ligneA 993001 06/04/11 00:00 856
ligneA 993001 15/04/11 00:00 1005
ligneA 993001 27/04/11 00:00 934 929.6701802 A
ligneA 993001 04/05/11 00:00 974
ligneA 993001 13/05/11 00:00 989
ligneA 993001 26/05/11 00:00 1111 1022.876268 A
ligneA 993001 07/06/11 00:00 1167
ligneA 993001 13/06/11 00:00 1212
ligneA 993001 29/06/11 00:00 1400 1255.742242 B==>A
A chaque fois que je calcule une moyenne (avec un group by sur ligne, produit, mois), j'établis un premier classement avec une instruction case when==> ça je gère!
ensuite, il faut que j'aille compter le nombre de fois ou le produit x sur la ligne y a plus de 1250 defauts relevés sur les 9 derniers comptages précédent le mois "moyenné" (donc sur les 3 mois auparavant pour faire plus simple). Et si ce comptage est = 0, alors je peux rattraper le classement et le remonter d'un cran.
Est-ce plus clair ainsi?
Hors ligne
Pages : 1