Bonjour,
Je fais face à un problème que je pense complexe... en fait, je ne trouve pas de solution, me demandant s'il y en a une.
J'ai deux tables ADRESSEENVOI et ADRESSEFACTURATION qui comportent respectivement les adresses d'envoi de marchandises et les adresses de facturation. Ces deux tables peuvent être jointes par l'attribut IDCLIENT, clé étrangère fournie par une autre table qui n'entre pas ici dans la problématique.
Chaque adresse des deux tables est définie par plusieurs attributs dont :
- le code marchandise (CDMARCH)
- la date d'effet (DTEFFET)
- la date d'invalidation (DTINVALIDATION)
Un client donnant une adresse valide indique un CDMARCH. Le système génère une ADRESSEENVOI ou une ADRESSEFACTURATION, et initie la DTEFFET à la date du jour et la DTINVALIDATION à NULL.
Un client peut demander de retirer une telle adresse, auquel cas la DTINVALIDATION est remplie à la date du traitement.
Pour un même CDMARCH, un client peut avoir plusieurs adresses valides (bonjour la gestion !), c'est ce qui cause la difficulté. Car il me faut dans ma requête prendre la plus récente.
Il m'est demandé de fournir les (IDCLIENT, CDMARCH) dont la date l'ADRESSEENVOI la plus récente soit plus récente que la DATEFACTURATION (donc les adresses avec DTINVALIDATION = NULL).
J'espère être clair dans ce que je cherche.
En outre je cherche à faire un regroupement par CDMARCH et sélectionner la date la plus jeune dans chaque table pour comparer ensuite.
Je ne sais pas ce que la direction fait d'une telle requête, mais elle le veut avant la fin de cette présente semaine...
Si quelqu'un pouvait m'aider, je l'en remercie vivement d'avance. Si jamais c'est impossible, je n'aurais d'autre choix que de le faire en Java/Hibernate.
Partager