IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Sélection de l'état d'un processus par priorité


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Sélection de l'état d'un processus par priorité
    Bonjour à tous,

    J'essaie désespérément de créer une requête mais je n'y arrive pas.

    J'utilise une table (simplifiée) composée de 3 colonnes : PID, STATUS et TIMESTAMP. Cette table permet de suivre l'évolution d'un ensemble de processus identifiés par le champ PID. A chaque instant TIMESTAMP, un contrôle du statut (STATUS) d'un processus PID est effectué et tracé dans la table. A un instant donné, le statut d'un processus peut-être soit "OK", "ERROR" ou "WARNING".

    J'essaie de créer une requête qui récupère, pour chaque PID, le dernier statut en date sachant que le statut "ERROR" est plus important que le statut "WARNING" qui est plus important que le statut "OK".

    Par exemple, considérons la table suivante. Je veux que la requête retourne uniquement les valeurs en gras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    PID	STATUS	TIMESTAMP
    1	OK	23/10/2010 12:50
    1	WARNING	23/10/2010 12:51
    1	OK	23/10/2010 12:52
    2	OK	23/10/2010 12:53
    2	WARNING	23/10/2010 12:54
    2	ERROR	23/10/2010 12:55
    2	WARNING	23/10/2010 12:56
    3	ERROR	23/10/2010 12:57
    3	WARNING	23/10/2010 12:58
    3	OK	23/10/2010 12:59
    3	ERROR	23/10/2010 13:00
    4	OK	23/10/2010 13:01
    4	OK	23/10/2010 13:02
    5	WARNING	23/10/2010 13:03
    5	ERROR	23/10/2010 13:04
    5	WARNING	23/10/2010 13:05
    6	ERROR	23/10/2010 13:06
    6	OK	23/10/2010 13:07
    6	OK	23/10/2010 13:08
    7	WARNING	23/10/2010 13:09
    7	WARNING	23/10/2010 13:10
    Quelqu'un aurait-il une requête magique ?
    J'espère avoir été clair. Merci d'avance pour votre aide !

    -GreenLemon

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Que donne la requête suivante (non testée) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select pid,
           max(status) keep (dense_rank last order by trunc(TIMESTAMP) ,
                                                       case when status = 'OK'      then 1
                                                            when status = 'WARNING' then 2
                                                            when status = 'ERROR'   then 3 
                                                        end , timestamp) as status,
           max(timestamp) keep (dense_rank last order by trunc(TIMESTAMP) ,
                                                       case when status = 'OK'      then 1
                                                            when status = 'WARNING' then 2
                                                            when status = 'ERROR'   then 3 
                                                        end , timestamp) as tstamp
      from latable
     group by pid

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour skuatamad et merci beaucoup pour ta réponse ! Ca marche !!

    Par contre, à quoi servent les clauses trunc(TIMESTAMP) puisque tu effectues déjà un tri de deuxième ordre sur timestamp ? J'obtiens le même résultat en les enlevant.

    Merci encore.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    le dernier statut en date
    J'étais parti du principe qu'il y avait plusieurs dates (jours différents) par PID et qu'il fallait travailler avec la plus récente donc trunc(TIMESTAMP) pour ne travailler que sur la dernière date (sans les heures minutes secondes) et le dernier tri sur timestamp c'est pour gérer le cas :
    4 OK 23/10/2010 13:01
    4 OK 23/10/2010 13:02
    Où il faut prendre la plus récente.

    Mais le tri sur trunc(TIMESTAMP) est peut être inutile.

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Pardon, je n'ai pas été clair. Par "dernier statut en date" je voulais simplement dire "statut le plus récent".
    Donc si le statut d'un processus est "OK" à 13:00 et également "OK" à 14:00 je suis seulement intéressé par le deuxième.

    Merci encore pour ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tuer des processus par leur nom
    Par tedparker dans le forum Access
    Réponses: 2
    Dernier message: 12/09/2006, 16h19
  2. Réponses: 15
    Dernier message: 06/12/2005, 17h41
  3. Récupérer l'état d'un processus créé avec CreatProcess
    Par Didier L dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/09/2005, 00h39
  4. Processus.. adoption d'un processus par init
    Par Francois Trazzi dans le forum Administration système
    Réponses: 15
    Dernier message: 17/01/2005, 13h56
  5. [CR9]Modifier des états créés en V9 par la V8.5
    Par Milou79 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 03/09/2004, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo