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 :

Script SQL selon algorithme


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut Script SQL selon algorithme
    Bonjour,
    J'ai requête à faire selon un algo...
    En fait, je dois ajouter une colonne "test" dans ma table selon les resultats de la requete.
    J'ai une table qui historise les données de cette façon:
    cf pièce jointe : test.jpg

    Mon objectif est de créer une colonne "test" qui marque :
    - "1" si pour le MAX(update_ID), j'ai TYPE_O = "A"
    - "2" si pour le MAX(update_ID), j'ai TYPE_O = "B"
    Sinon il faut regarder les lignes au-dessus (l'historique de l'ID) jusqu'a ce que l'on obtienne:
    - Type_O = "A" donc "test"=3
    - Type_O = "B" donc "test"=4


    Je ne sais pas si je suis claire...
    J'obtiens correctement test = 1 ou 2 avec cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct ID, MAX(UPDATE_ID), TYPE_O, DATE_O,  decode(TYPE_O,'A',1, 'C',2) test
     from historique
    group by  ID, TYPE_O, DATE_O,  decode(TYPE_O,'A',1, 'B',2)

    mais je ne sais pas trop comment faire lire l'historique pour les 2 autres cas...


    voici ce que je veux obtenir: cf piece jointe: test_resultat.jpg

    qqn peut me donner des pistes?
    Je ne sais pas si avec les fonctions analytiques, ca peut faire avancer des choses?

    Merci d'avance!
    Ps: j'ai oublié d'indiquer que je suis en Oracle 9i
    Images attachées Images attachées   

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    Personne n'a d'idée?

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    Tout le monde est en vac

  4. #4
    Membre émérite Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Par défaut
    Moi je dirais un truc du style.

    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
     
    select   t1.id, t1.update_id, t1.date_o, t1.update_o,
             decode (t1_update_id,t3.update_id,decode(type_o,'A',1,2),decode(type_o,'A',3,4))
     
    from     MATABLE t1,
             (select   id, max(update_id) update_id
              from     MATABLE
              where    type_o in ('A','B')
              group by id) t2,
             MATABLE t3
     
    where    t1.id=t3.id
    and      t3.id=t2.id
    and      t3.update_id=t2.update_id
     
    order by t1.id, t1.update_id

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    Ah oui, je vais tenter ça...je vous tiens au courant.
    Merci d'avoir répondu!

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    Ca marche à peu pres si je fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT   t1.id, t1.update_id, t1.date_o, t1.type_o,
             decode (t1.type_o,'A',1,'B',2,decode(t2.type_o,'A',3,'A5',2)) test
     FROM     MATABLE t1,
             (SELECT   id, max(update_id) update_id,type_o
              FROM     historique
              WHERE    type_o IN ('A','B')
              GROUP BY id, type_o) t2,
             historique t3
     WHERE    t1.id=t3.id
    AND      t3.id=t2.id
    AND      t3.update_id=t2.update_id
     ORDER BY t1.id, t1.update_id
    Par contre pour un cas, j'ai une erreur.
    Dans le cas où j'ai, dans ma table d'historique, 'A' et 'B' à suivre (ou vice-versa).
    Par exemple :
    Id-----update_id-----date_o-----type_o
    1-----45-----01/01/2007-----A
    1-----46-----02/01/2007-----A
    1-----47-----03/01/2007-----B
    1-----48-----04/01/2007-----XXX

    Et bien cette requête, du coup m'affiche, 2 lignes pour cet ID, alors que j'en veux qu'une: le 'B'.
    En fait, je veux le type_o pour chaque id selon le max(update_id).

Discussions similaires

  1. Execution d'un script SQL
    Par Drahu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/03/2004, 16h55
  2. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57
  3. Exécuter un script SQL
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/03/2004, 08h47
  4. create user, affectation droits et scripts sql
    Par hirochirak dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/02/2004, 10h21
  5. script SQL : affectation de variables
    Par Laura dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/10/2003, 21h32

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