Aller au contenu

Requette SQL pour récupérer la plus petites paire (de valeur)


billcom

Sujets conseillés

Bonjour le hub,



J'aurai besoin d'un coup de pouce concernant une requette MYSQL.



Plantons le décor.



J'ai le tableau suivante :



id - Colone A - Colone B


1 10 30


2 10 35


3 15 20


4 20 10


5 20 35


6 20 15




Va = valeur colonea


Vb = valeur coloneb



J'aimerai récupérer l'id de l'enregistrement ayant une Va > 18 et une Vb > 11 et ayant la paire de valeur la plus proche de ma recherche.


ce serai donc l'id 6


avec Va = 20 et Vb = 11


Or je n'arrive pas à ressortir uniquement la ligne contenant les valeur minimums je ressorts toujours 2 lignes minimum dans le cas présent #5 et #6



Merci pour votre aide smile.gif




Anthony


Lien vers le commentaire
Partager sur d’autres sites

Je n'ai pas accès à ma base pour le moment mais effectivement ça me semble logique. Je partais sur des trucs tordu dans tous les sens probablement lié aux 14h de dev de la journée x)


je te fais un retour dès que j'ai eu l'occasion de tester ça



En tout cas merci pour ton aide !


Modifié par billcom
Lien vers le commentaire
Partager sur d’autres sites

SELECT id, (va -18 + vb -11) AS total

FROM `table`

WHERE va >18

AND vb >11

AND (va -18 + vb -11) IN (

SELECT MIN( va -18 + vb -11 )

FROM `table`

WHERE va >18

AND vb >11

)

Sinon t'auras une erreur si l'écart d'un vb est supérieur à l'écart d'un va.

Tu peux avoir pls réponses dans le cas d'une égalité de total, tu peux ajouter un limit 1 (ex dasn ton cas : va=19 et vb=16).

Lien vers le commentaire
Partager sur d’autres sites

Merci SStephane pour ton aide également



je découvre ce type de requete pour la première fois à quoi sers le



(va -18 + vb -11) AS total

Anthony


Modifié par billcom
Lien vers le commentaire
Partager sur d’autres sites

La première chose à faire, c'est de déterminer ce que tu veux dire par "plus proche de". En gros, il faut que tu définisses comment tu calcules la "distance". Ça peut simplement être la somme des deux écarts, ou ça peut être quelque chose de plus compliqué (par exemple la somme des carrés des écarts), tout dépend de l'application.



En considérant que tu utilises la somme des écarts:


SELECT * FROM table WHERE va > ? AND vb > ? ORDER BY (va - ? + vb - ?) LIMIT 1


devrait suffire.



Jacques.


Lien vers le commentaire
Partager sur d’autres sites

Bonjour,



Merci pour vos aides et vos explications j'ai découvert qu'on pouvait faire des order by sur des opérations grace à vous :).



Finalement mon problème n'était pas si complexe il me suffisait de prendre un peu de recul et la réponse proposé par Dadou me permet d'obtenir le bon résultat. J'ai pas encore assez de données pour faire une batteries de test mais ça semble être la bonne solution.



Anthony

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...