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 :

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
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...

Auriez-vous une idée pour répondre à mon besoin ?

Merci d'avance d'avoir pris le temps de me lire.

Cordialement,
zz