Bonjour,

Ce n'est pas forcément une explication des fonctions analytiques que je recherche mais c'est plutôt la méthode à utiliser pour arriver à mon résultat.


Les données :


Nom : les données.jpg
Affichages : 275
Taille : 178,2 Ko

je souhaiterais obtenir les 2 lignes mises en verte.
J'ai utilisé dans mon code SQL (requête intermédiaire) les 2 fonctions : lag et lead. Pour obtenir la valeur précédente et suivante de l'indicateur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT NM_EC, DT_MAJ_EI, DT_HISTO_EI, ID_EVT, INDICATEUR
, Lag(Nvl(INDICATEUR,'(NR)')) OVER (PARTITION BY NM_EC ORDER BY DT_HISTO_EI, DT_MAJ_EI) AS INDICATEUR_PREC
, Lead(Nvl(INDICATEUR,'(NR)')) OVER (PARTITION BY NM_EC ORDER BY DT_HISTO_EI, DT_MAJ_EI) AS INDICATEUR_PREC
FROM ...
Maintenant je voudrais avoir votre avis pour appliquer les règles de gestion ci-dessous et n'obtenir que les 2 lignes surlignées en verte :

Règles de gestion*:
Si on n'a pas de changement dans la valeur de l'indicateur pour un même numéro EC et une même date histo alors on garde l'ancien élément, donc le plus petit ID_EVT
En revanche Si on a une évolution de l'indicateur pour un même numéro EC et une même date histo c'est la ligne sur laquelle il y a eu le dernier changement (max de de l'ID_EVT)

Vous avez une solution à me proposer ?

Au cas où le fichier ne s'affiche pas :

Résultat à obtenir (lignes surlignées en verte)
Numéro EC Date Histo Date MAJ ID_EVT Indicateur
1016210035574 05/09/16 19/10/16 71010 010111
1016320050330 14/09/16 14/09/16 62441 111111

Étape intermédiaire (ma requête)

Numéro EC Date Histo Date MAJ ID_EVT Indicateur Indicateur PREC Indicateur SUIV
1016210035574 05/09/16 19/10/16 71008 11111 (null) 010111
1016210035574 05/09/16 19/10/16 71010 010111 11111 (null)
1016320050330 14/09/16 14/09/16 62286 111111 (null) 111111
1016320050330 14/09/16 14/09/16 62441 111111 111111 (null)

Le résultat que j'obtient et qui n'est pas correct est :

Numéro EC Date Histo Date MAJ ID_EVT Indicateur
1016210035574 19/10/16 05/09/16 71008 11111
1016210035574 19/10/16 05/09/16 71010 10111 -> Ici l'indicateur à changé donc c'est cette ligne uniquement qui doit apparaitre et non celle avec id_evt = 71008
1016320050330 14/09/16 14/09/16 62286 111111


Merci pour vos réponses et n'hésitez pas à me poser des questions

Cdlt,

Sakaupat