Aide sur une requête de changement d'état
flonox1980
Messages postés
1
Statut
Membre
-
cyril1982 Messages postés 110 Statut Membre -
cyril1982 Messages postés 110 Statut Membre -
Bonjour à tous,
Je me permets de vous solliciter car je sèche. Je suis loin d'être un expert et j'ai vraiment besoin d'aide.
Je vous explique le besoin. Je travaille sur une base Oracle, j'aimerai donc trouver une solution en sql Oracle.
Partons du principe que j'ai une table contenant « les photos » à des instants datés d'éléments comme suit :
Client / Etat / Date
C1 / O / 01/01/2012
C1 / O / 04/01/2012
C1 / N / 06/01/2012
C1 / N / 07/01/2012
C1 / O / 12/01/2012
C1 / O / 24/01/2012
C1 / O / 01/06/2012
C1 / O / 06/06/2012
C1 / N / 20/06/2012
C2 ...
Je cherche à identifier chaque changement d'Etat sous la forme :
Client / Etat Précédent / Etat de changement / Date de changement / Délai entre précédente « photo » d'un client et date de changement d'état
C1 / O / N / 06/01/2012 / 2
C1 / N / O / 12/01/2012 / 5
C1 / O / N / 20/06/2012 / 14
C2 ....
Merci beaucoup de votre aide
Je me permets de vous solliciter car je sèche. Je suis loin d'être un expert et j'ai vraiment besoin d'aide.
Je vous explique le besoin. Je travaille sur une base Oracle, j'aimerai donc trouver une solution en sql Oracle.
Partons du principe que j'ai une table contenant « les photos » à des instants datés d'éléments comme suit :
Client / Etat / Date
C1 / O / 01/01/2012
C1 / O / 04/01/2012
C1 / N / 06/01/2012
C1 / N / 07/01/2012
C1 / O / 12/01/2012
C1 / O / 24/01/2012
C1 / O / 01/06/2012
C1 / O / 06/06/2012
C1 / N / 20/06/2012
C2 ...
Je cherche à identifier chaque changement d'Etat sous la forme :
Client / Etat Précédent / Etat de changement / Date de changement / Délai entre précédente « photo » d'un client et date de changement d'état
C1 / O / N / 06/01/2012 / 2
C1 / N / O / 12/01/2012 / 5
C1 / O / N / 20/06/2012 / 14
C2 ....
Merci beaucoup de votre aide
A voir également:
- Aide sur une requête de changement d'état
- Changer de dns - Guide
- Remettre pc etat usine - Guide
- Changement d'heure - Guide
- Etat disque dur - Télécharger - Informations & Diagnostic
- Changement d'écriture facebook - Guide
2 réponses
Bonjour,
Je n'ai pas la requête exacte à ton besoin, mais j'ai une piste :
N'ayant pas de base de données lancée sur mon poste, il peut y avoir des erreurs de syntaxe.
Explications :
Dans la sous-requête (table table_position), j'ajoute un champ position afin de trier les changements d'état de chaque client.
Ce qui renvoie :
Client0, Etat0, Date0, 0
Client0, Etat1, Date1, 1
Client0, Etat2, Date2, 2
Client1, Etat0, Date0, 0
Client1, Etat1, Date1, 1
Client1, Etat2, Date2, 2
...
Dans la requête principale, via "group by Client, position / 2", je regroupe les entrées de la table deux à deux pour chaque client.
Puis j'utilise les "case when" afin de récupérer les Etats/Date d'une position particulière.
Cette requête ne correspond pas tout à fait à ton besoin, en effet je regroupe deux à deux (0 avec 1, 2 avec 3, 4 avec 5 etc.) Alors que chaque entrée devrait être regrouper avec la précédente et la suivante (0 avec 1, 1 avec 2, 2 avec 3 etc.). De plus, je ne vérifie pas le changement d'état.
Bon courage !!
Je n'ai pas la requête exacte à ton besoin, mais j'ai une piste :
Select Client, max(case when position % 2 = 0 then Etat else null end), max(case when position % 2 = 0 then null else Etat end), max(case when position % 2 = 0 then null else Date end) from ( select Client, Etat, Date, ROW_NUMBER() OVER (PARTITION BY Client ORDER BY Date desc) as position from ma_table_clients ) as table_position group by Client, position / 2
N'ayant pas de base de données lancée sur mon poste, il peut y avoir des erreurs de syntaxe.
Explications :
Dans la sous-requête (table table_position), j'ajoute un champ position afin de trier les changements d'état de chaque client.
Ce qui renvoie :
Client0, Etat0, Date0, 0
Client0, Etat1, Date1, 1
Client0, Etat2, Date2, 2
Client1, Etat0, Date0, 0
Client1, Etat1, Date1, 1
Client1, Etat2, Date2, 2
...
Dans la requête principale, via "group by Client, position / 2", je regroupe les entrées de la table deux à deux pour chaque client.
Puis j'utilise les "case when" afin de récupérer les Etats/Date d'une position particulière.
Cette requête ne correspond pas tout à fait à ton besoin, en effet je regroupe deux à deux (0 avec 1, 2 avec 3, 4 avec 5 etc.) Alors que chaque entrée devrait être regrouper avec la précédente et la suivante (0 avec 1, 1 avec 2, 2 avec 3 etc.). De plus, je ne vérifie pas le changement d'état.
Bon courage !!