Bonjour,
Je cherche à récupérer la plus grosse facture faite à chaque clients (pour des besoins commercial, etc). Les factures sont stockées sur 2 tables, dont la structure est identique. Les clients sont dans une autre table. Les tables sont lié par du 0,n sur l'id client (idcli)
J'ai donc une tables [Clients] avec leurs coordonnées, [Bis07] contenant les factures 2007 et [Bis08] contenant les factures 2008.
En outre je dois prendre prioritairement les données de [Bis08] même si on trouve une facture plus grosse dans [Bis07]
Deux premières requêtes (une pour chaque table) s'occupent de trouver les maximum :
SELECT Bis07.idcli, Max(Bis07.montant) AS MaxMontant
FROM Bis07 GROUP BY Bis07.idcli;
Deux autres requêtes renvoient la référence de la facture et l'id client qui ont le plus gros montant :
SELECT Bis07.idfactc, Bis07.idcli
FROM req_Bis07_MaxM INNER JOIN Bis07 ON (req_Bis07_MaxM.MaxMontant= Bis07.montant) AND (req_Bis07_MaxM.idcli= Bis07.idcli);
Enfin, une requête renvoi les infos clients avec quelques données de la plus grosse facture (j'ai réduit les champs retournés pour simplifier) :
SELECT Clients.RSA, Clients.Contact, Bis07.idfactc, Bis07.montant, Bis07.datefact
FROM Clients INNER JOIN (Bis07 INNER JOIN req_Bis07_MFiltre ON Bis07.idfactc = req_Bis07_MFiltre.idfactc ) ON Clients.idcli = Bis07.idcli;
Problème 1 : ça fait pleins de petites requêtes
Problème 2 : si j'ai des montant identique pour un client, j'obtient des doublons
Problème 3 : je ne sais pas comment donner priorité a Bis08 sur Bis07 s'il existe le même idcli chez les deux.
Je ne peux pas utiliser DISTINCT parce que les données rappatrié (id/données des factures) sont différentes...
Avez vous une solution élégante ou des pistes de recherche ?
Merci !