Requête imbriquée ou inner join
Bonjour à tous,
J'ai une base oracle 10 avec ces 3 tables :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| xbasecomp
+---------+------------+
|itmref_0 | supdat_0 |
+---------+------------+
| ref1 | 2023-08-02 |
| ref2 | |
| ref3 | 2023-10-10 |
+---------+------------+
itmmaster
+---------+------------+
|itmref_0 | itmsta_0 |
+---------+------------+
| ref1 | 1 |
| ref2 | 2 |
| ref3 | 6 |
+---------+------------+
stojou
+---------+--------------+------------+
|itmref_0 | loc_0 | iptdat_0 |
+---------+--------------+------------+
| ref1 | emp1 | 2023-01-10 |
| ref1 | emp2 | 2022-05-15 |
| ref3 | emp10 | 2021-10-26 |
| ref3 | emp8 | 2022-04-22 |
| ref3 | emp25 | 2023-10-01 |
| ref2 | emp1 | 2023-10-31 |
| ref2 | emp3 | 2023-08-18 |
+---------+--------------+------------+ |
Je veux obtenir dernier emplacement (stojou.loc_0) occupé pour une référence article (itmmaster.itmref_0) ayant le status (itmmaster.itmsta_0 = 6) après le 1 octobre (xbasecomp.supdat_0)
Avec le jeu de données je devrais obtenir
Code:
1 2 3 4 5
| +----------+-------+------------+
| itmref_0 | loc_0 | supdat_0 |
+----------+-------+------------+
| ref3 | emp25 | 2023-10-10 |
+----------+-------+------------+ |
J'ai essayé deux méthodes avec les requêtes imbriqués mais sans grand succès (et j'ai plus la requête sous la main). Ensuite j'ai essayé avec les INNER JOIN mais il me renvoie n'importe quoi comme résultat
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| SELECT x.ITMREF_0, s.LOC_0
FROM XBASECOMP x
INNER JOIN ITMMASTER i ON i.ITMREF_0 = x.ITMREF_0
INNER JOIN STOJOU s ON s.ITMREF_0 = x.ITMREF_0
INNER JOIN (
SELECT s2.ITMREF_0, MAX(s2.IPTDAT_0) "MaxSup"
FROM STOJOU s2
GROUP BY s2.ITMREF_0
) maxd ON x.ITMREF_0 = maxd.ITMREF_0
WHERE
x.SUPDAT_0 > TO_DATE('2023-10-01', 'yyyy-mm-dd') AND
i.ITMSTA_0 = 6 |
Je sèche complètement, auriez-vous une idée pour m'aider ?
Merci d'avance.