|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
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 :
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 |
||
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
Personne n'a d'idée?
|
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
Tout le monde est en vac
|
|
|
00
|
|
|
#4 | ||
|
Membre chevronné
![]() Inscription : septembre 2007 Messages : 519 ![]() |
Moi je dirais un truc du style.
Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
Ah oui, je vais tenter ça...je vous tiens au courant.
Merci d'avoir répondu! |
|
|
00
|
|
|
#6 | ||
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
Ca marche à peu pres si je fais ça:
Code :
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). |
||
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 457 ![]() |
J'avais un peu de temps libre au boulot,
Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
Merci MCM pour ton post rapide!
Par contre, ta requete va chercher les données que dans 1 table, alors qu'en fait, je dois faire une premiere recherche dans "matable" (qui contient le derniere état) puis si je n'ai pas 'A' ou 'B' dans cette table, je vais faire une recherche dans MATABLE_HIST. (désolée je n'ai pas été claire). voici un exemple du contenu de MATABLE: id----update_id----date_o-----type_o 1----49----05/01/2007-----XXX Et un exemple du contenu de MATABLE_HIST: 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 Donc pour cet ID, je dois récupérer 'B' soit test=4. |
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 457 ![]() |
C'est plus simple alors, un truc dans le genre
Code :
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#10 | ||
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
J'ai réussi à obtenir ce que je voulais avec cette requête:
Code :
|
||
|
|
00
|
|
|
#11 | ||
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
La solution de MCM fonctionne trés bien.
Sinon essaie ça Code :
|
||
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
Super. Ca marche super bien!
Merci à tous! |
|
|
00
|
|
|
#13 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
Je reviens vers vs car la demande a changée....:-( et je n'arrive pas a voir une requete optimisée...
voilà en fait, je dois sélectionner ds l'historique la première ligne qui ne contient pas reg='XXXXX' Si dans cette ligne, type_o = 'A' alors test=1, si type_o='B' alors test=2. Sinon si type_o est différent de A ou B, il faut lire les lignes au dessus et récupérer toute la ligne qui contient le prochain 'A' ou 'B'. si le prochain type_o est 'A' alors test=3 sinon si type_o='B' alors test=4 Ex : Id-----update_id-----date_o-----type_o-----reg 1------45--------01/01/2007------A-----'XXXXX' 1------46--------02/01/2007------A-----'XXXXX' 1------47--------03/01/2007------B-----'XXXXX' 1------48--------04/01/2007-----XXX-----'FGRTH' Dans ce cas là : On aura : Id-----update_id-----date_o-----type_o-----reg-----test 1------47--------03/01/2007------B-----'XXXXX'-----4 A votre avis, c'est possible de le faire en 1 requete? |
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Inscription : novembre 2006 Messages : 226 ![]() |
Pas de solution possible à votre avis?
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com