Requête mysql pour faire une interpolation

Fermé
Maliossimo - 25 juin 2012 à 13:00
 A.Nonymous - 26 juin 2012 à 13:49
Bonjour,
J'ai une table avec des valeurs dans les colonnes x et y.

X , Y
10 676
20 894
30 1100
40 1200
50 1000

Je me demandais si il ya une syntaxe SQL / fonction qui peut m'aider à faire une interpolation linéaire. Par exemple, je veux que la valeur interpolée de Y qui correspond à X = 35.

Compte tenu de la table ci-dessus, la solution doit retourner y = 1150 pour x = 35 et y = 1100 pour x = 45.

Est ce que vous avez des suggestions?. Merci d'avance pour toute aide.

2 réponses

vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
25 juin 2012 à 13:04
je ne pense pas que ce soit possible (mais je peux me tromper)
le sql est un langage d'interrogation de base de donnée, et non de calcul compliqué comme tu le souhaite.
le plus simple serais d'utiliser du php (ou un autre langage)
0
je peux utiliser java pour faire l'interpolation, mais est ce qu'il une requête qui peut me retourner
X = 30 Y = 1100
X= 40 Y = 1200
quand je demande retourner Y quand X = 35???
0
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
25 juin 2012 à 13:17
tu récupère la dizaine pour la valeur minimal de X et tu rajoute 10 pour la valeur maximal
et pour Y, si tu as X, tu as Y
0
comment je peux faire ça???
je suis un débutant dans les base de données ^^
0
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
25 juin 2012 à 13:26
là c'est pas encore de la base de données, c'est du java.
tu récupère la valeur 35:
tu as différentes méthodes pour récupérer les dizaines, soit tu divise par 10 et tu arrondi, soit tu gère ça comme une chaine et tu récupère tout sauf le dernier caractère.

au final tu obtient 30, auquel tu rajoute 10: ça te donne ta valeur min et max de X
ensuite tu fait une requête par exemple:
select y from truc where x = 30
select y from truc where x=40
ces deux requêtes te renvoient la valuer min et max de y
0
merci pour la réponse :)
0
SELECT
(( target.x - lt.x ) * ( gt.y - lt.y ) / ( gt.x - lt.x )) + lt.y AS computed_y
FROM (SELECT 35 'x') AS target
INNER JOIN items AS gt ON gt.x >= target.x
INNER JOIN items AS lt ON lt.x <= target.x
0