Requête upgrade comparer plusieurs valeurs
Bonjour,
J'ai un gros problème depuis plusieurs temps que je pensais avoir résolu, mais il se trouve que non. :furax:
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) :furax: :
Exemple:
Code:
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
); |
Je veux également éviter de faire de cette manière car trop long pour ma tâche :
Code:
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
)
); |
Si quelqu'un peut m'aider ce serait COOL ;)
Merci