Bonjour,
J'ai un petit soucis sur une requête SQL, en effet je dois pouvoir choisir parmi plusieurs enregistrements la meilleure combinaison correspondant à une valeur donnée.
Prenons l'exemple de la table MA_TABLE(id, valeur) qui possède les valeurs suivantes :
ID VALEUR 1 2 2 5 3 5 4 10 5 10 6 150 7 220
Je veux pouvoir sélectionner en une requête les différentes lignes qui vont pouvoir me donner la valeur la plus proche de 14 sans dépasser 14 (14 étant un exemple paramétrable).
En gros pour mon jeux d'essai, je devrais avoir soit :
ID VALEUR 1 2 4 10
--> Donc un résultat de 2 + 10 = 12 (plus proche de 14 par la borne minimale)
Soit :
ID VALEUR 1 2 5 10
--> Donc un résultat de 2 + 10 = 12 (peut importe quelle ligne je prends, seule la valeur est importante) donc la valeur 10 peut venir de l'ID 4 ou 5
Si je remplace la valeur 14 par 23 (par exemple) la requête devrait me retourner quelque chose comme :
ID VALEUR 1 2 4 10 5 10
--> 2 + 10 + 10 = 22 qui est le plus proche de 23 par la borne minimale
Je n'arrive pas à trouver la requête adéquate, sachant que j'ai la contrainte de le faire en une seule requête (pas de possibilité d'algorithme ni de PL/SQL)...
J'ai essayé avec des In, Not In, Group By, Select imbriqués, Sum etc... Impossible d'avoir un résultat correct.
Si quelqu'un a un début d'idée je lui en serait reconnaissant.
Merci d'avance,
Contrec
Partager