Bonjour à tous,
Je suis en train de construire une requête qui sélectionne un ID "partiel" dans une table et qui doit récupérer dans une autre table la première occurrence active (j'entends par active, dont la date de fin de validité n'est pas dépassée) dont l'ID "complet" commence par l'ID partiel de l'autre table.
Exemple :
Table 1 :
MATRICULE DATE ID_PARTIEL 000001 31/07/2020 ABCDDD 000002 31/07/2020 ABCEEE 000002 31/07/2020 ABCDEF
Table 2 :
ID_PARTIEL ID_COMPLET DATE_FIN_VALIDITE ABCDDD ABCDDD01 30/04/2020 ABCDDD ABCDDD02 31/12/2020 ABCDDD ABCDDD03 31/12/2020 ABCEEE ABCEEE01 31/12/2020 ABCEEE ABCEEE02 31/12/2020 ABCEEE ABCEEE03 31/12/2020 ABCDEF ABCDEF01 31/12/2020 ABCDEF ABCDEF02 31/12/2020 ABCDEF ABCDEF03 31/12/2020
Le résultat que je souhaite obtenir pour ma requête est le suivant :
MATRICULE DATE ID_PARTIEL ID_COMPLET 000001 31/07/2020 ABCDDD ABCDDD02 000002 31/07/2020 ABCEEE ABCEEE01 000002 31/07/2020 ABCDEF ABCDEF01
J'ai essayé avec "TOP 1" mais cela me donne uniquement la première occurrence de la table entière (sans tenir compte du regroupement par ID_complet).
Voici l'un exemple des essais que j'ai fait :
Si je mets le TOP 1 je n'ai qu'une seule ligne et si je ne le mets pas j'ai les occurrences de la Table 1 et de la table 2...
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 WITH T1 as (select MATRICULE, DATE, ID_PARTIEL from TABLE1), T2 as (select ID_PARTIEL, ID_COMPLET, DATE_FIN_VALIDITE from TABLE2) SELECT TOP 1 T1.MATRICULE, T1.DATE, T1.ID_PARTIEL, T2.ID_COMPLET FROM T1 inner join T2 on T1.ID_PARTIEL = T2.ID_PARTIEL and T1.DATE < T2.DATE_FIN_VALIDITE
Auriez-vous une idée pour répondre à mon besoin ?
Merci d'avance d'avoir pris le temps de me lire.
Cordialement,
zz
Partager