Bonjour à tous,
J'ai une base oracle 10 avec ces 3 tables :
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)
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
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 | +---------+--------------+------------+
Avec le jeu de données je devrais obtenir
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 +----------+-------+------------+ | itmref_0 | loc_0 | supdat_0 | +----------+-------+------------+ | ref3 | emp25 | 2023-10-10 | +----------+-------+------------+
Je sèche complètement, auriez-vous une idée pour m'aider ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci d'avance.
Partager