PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#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

Pied de page des forums