Première occurence de chaque groupe de données dans une table
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:
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