Bonjour,
J'ai un gros problème depuis plusieurs temps que je pensais avoir résolu, mais il se trouve que non.
Je dois mettre à jour une colonne dans une table A (comportant notamment une date) grâce à une autre table B (comportant également une date).
Jusque là ça va.
Mais le problème est que pour mettre à jour la table A, je dois croiser les 2 tables (FAIT) et prendre la dateB la plus récente (qui peut être différente d'une ligne à l'autre) et qui est inférieur à la dateA.
Exemple :
CHAMPS TAB_A TAB_B TAB_B TAB_B X 'PARIS' 'PARIS' 'PARIS' 'PARIS' Y 'ROUTE' 'ROUTE' 'ROUTE' 'ROUTE' PRIX 2 3 4 DATE 05/05/12 01/01/11 01/01/12 01/01/13
CHAMPS TAB_A TAB_B TAB_B TAB_B X 'LONDRES' 'LONDRES' 'LONDRES' 'LONDRES' Y 'CHEMIN' 'CHEMIN' 'CHEMIN' 'CHEMIN' PRIX 2 3 4 DATE 14/05/12 01/01/11 01/06/12 01/01/13
Le prix du champs donc X = 'PARIS' doit être mise à jour à 3.
Le prix du champs donc X = 'LONDRES' doit être mise à jour à 2.
J'ai essayé plusieurs méthodes mais cela ne fonctionne pas (également avec une clause WITH) :
Exemple:
Je veux également éviter de faire de cette manière car trop long pour ma tâche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 UPDATE TAB_A L SET L.PRIX = (SELECT PRIX FROM (SELECT T.PRIX FROM TAB_B T WHERE L.X = T.X AND L.Y = T.Y AND T.DATE <= L.DATE ORDER BY T.DATE ) WHERE rownum <=1 );
Si quelqu'un peut m'aider ce serait COOL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 UPDATE TAB_A L SET L.PRIX = (SELECT T.PRIX FROM TAB_B T WHERE T.X = L.X AND T.Y = L.Y AND T.DATE = (SELECT MAX(DATE) FROM TAB_B WHERE X = L.X AND Y = L.Y AND DATE <= L.DATE ) );
Merci
Partager