SQL - Elaboracion de consulta

 
Vista:

Elaboracion de consulta

Publicado por Aender (2 intervenciones) el 17/02/2012 16:11:37
Hola foreros me presento mi nombre es Aender y soy un programador ocasional, en este momento me siento confundido con una consulta que necesito elaborar.

Tengo 2 tablas, en cada una hay una columna con valores numericos y necesito relacionar cada valor de una de las columnas con los valores de la otra que se encuentren en un rango de aproximadamente +/- 3% con respecto a la primera.

Si les parece un poco enredado mi planteamiento es porque creo que asi estoy ahorita y queria ver si alguien tiene una propuesta para mi confusión.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Elaboracion de consulta

Publicado por leonardo_josue (1173 intervenciones) el 17/02/2012 16:58:19
Hola Aender:

Si tú estás confundido con el problema imagina cómo estamos nosotros , a menos que alguno de los foristas sea adivino pues será casi imposible poder ayudarte, pero quien sabe, tal vez el espíritu de Nostradamus nos ilumine el día de hoy, hagamos un intento.

La explicación que das es muy vaga, pero tal pareciera que estamos hablando de algún tipo de problema estadístico, yo tengo algo de experiencia en ese campo, así es que veamos si te sirve esto:

Supongamos que tienes los siguientes datos:

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM tabla1;
+------+-------------+-------+
| id   | descripcion | valor |
+------+-------------+-------+
|    1 | UNO         |   100 |
|    2 | DOS         |    80 |
|    3 | TRES        |    97 |
+------+-------------+-------+
3 rows in set (0.00 sec)


Dado que tú estás manejando una tolerancia de +/- 3% entonces debemos calcular justamente los valores mínimos y máximos que entran en el rango. Esto lo puedes obtener de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT id, descripcion, valor,
    -> (valor-(valor*0.03)) valor_min,
    -> (valor * 1.03) valor_max
    -> FROM tabla1;
+------+-------------+-------+-----------+-----------+
| id   | descripcion | valor | valor_min | valor_max |
+------+-------------+-------+-----------+-----------+
|    1 | UNO         |   100 |     97.00 |    103.00 |
|    2 | DOS         |    80 |     77.60 |     82.40 |
|    3 | TRES        |    97 |     94.09 |     99.91 |
+------+-------------+-------+-----------+-----------+
3 rows in set (0.02 sec)


Ahora si, estos límites min y max son los que debes utilizar para relacionarlos con tu segunda tabla. Supongamos que tu tabla2 tiene los siguientes datos:

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM tabla2;
+------+-------------+-------+
| id   | descripcion | valor |
+------+-------------+-------+
|    4 | CUATRO      |    50 |
|    5 | CINCO       |    95 |
|    6 | SEIS        |    97 |
+------+-------------+-------+
3 rows in set (0.00 sec)


Para relacionar las dos tablas, puedes hacerlo con un INNER JOIN, y en la cláusula ON en lugar de utilizar una condición (=) puedes utilizar una condición (BETWEEN), más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT * FROM tabla1
    -> INNER JOIN tabla2 ON tabla2.valor
    -> BETWEEN (tabla1.valor-(tabla1.valor*0.03)) AND (tabla1.valor * 1.03)
    -> ORDER BY tabla1.id;
+------+-------------+-------+------+-------------+-------+
| id   | descripcion | valor | id   | descripcion | valor |
+------+-------------+-------+------+-------------+-------+
|    1 | UNO         |   100 |    6 | SEIS        |    97 |
|    3 | TRES        |    97 |    5 | CINCO       |    95 |
|    3 | TRES        |    97 |    6 | SEIS        |    97 |
+------+-------------+-------+------+-------------+-------+
3 rows in set (0.00 sec)


Observa en el resultado que el registro CUATRO (valor = 50) no aparece para ningún registro, pues este no está en ningún rango válido. en cambio el registro SEIS (valor = 97) aparece dos veces, pues este entra en la tolerancia del 100 y también en la del 97...

Espero que esto te pueda ayudar, si continuas con problemas pues trata de ordenar mejor tus ideas, si es trabajo de escuela pide a a tu maestro que te explique mejor qué es lo que se requiere, si es cuestión de trabajo igual pregunta con tu jefe o con el usuario la definición del requerimiento. Recuerda que es mejor preguntar y parecer tonto a no preguntar y realmente serlo.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Elaboracion de consulta

Publicado por Aender (2 intervenciones) el 17/02/2012 18:55:38
Mi estimado Leo

Muchas gracias por tu respuesta, entendiste a la perfección mi planteamiento y efectivamente es para resolver un problema de probabilidades de hecho tu ultima consulta la copie tal cual solo remplazando por mis valores y funciono perfectamente.

Te vuelvo a agradecer tu apoyo y espero poder apoyarte igualmente cuando lo necesites.

Saludos

Aender
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Elaboracion de consulta

Publicado por leonardo_josue (1173 intervenciones) el 17/02/2012 19:51:08
Jejejeje, después de todo Nostradamus si nos iluminó este día

Un gusto que te haya servido el código.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar