SQL - Aproximación

 
Vista:

Aproximación

Publicado por Pedro (5 intervenciones) el 11/08/2006 00:23:07
Hola

Existe en sql una función la cual me entrega el registro que tiene el valor más cercano a uno dato dado.

Por ej. en una tabla de clientes donde existe un campo que me entregue el alumno que tenga el promedio mas cercano a 4. teniendo en cuenta que las notan tienen 10 decimales y que es dificil que me entregue mas de un registro.

Gracias. Pedro
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

RE:Aproximación

Publicado por Isaías (5072 intervenciones) el 11/08/2006 00:45:24
Pedro

¿Que base de datos manejas?, ¿Porque hablas de CLIENTES y ALUMNOS?, ¿Debe ser el dato mas proximo al entregado en una variable o IGUAL?
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

RE:Aproximación

Publicado por Pedro (5 intervenciones) el 11/08/2006 17:24:00
Si, la idea es que me entregue el registro que contenga el valor de un campo mas proximo de un valor dado.

Sin tener que crear un bucle o algun algoritmo, quiero saber si existe alguna funcion en sql que me de el registro que tenga el valor más próximo o igual de una variable dada.

Atte. Pedro Ulloa M.
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

RE:Aproximación

Publicado por Isaías (5072 intervenciones) el 11/08/2006 18:20:35
Pues no mencionas que BASE DE DATOS tienes, pero en SQL SERVER, deberias referirte a LIKE.
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

RE:Aproximación

Publicado por Pedro (5 intervenciones) el 11/08/2006 18:29:45
Gracias por responder Isaías.

es sql server, pero lo que busco es un valor numérico el like me sirve pero tendría que hacer un bucle en el programa descontando de derecha a Izquierda no me gusta esa solucion.

Lo que quiero es buscar un numero en un campo de la tabla pero el que sea mas proximo a la cantidad buscada.

asi como la funcion max te entrega el maximo valor del campo, necesito una que te entregue el mas cercano a un valor dado.

Gracias.
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

RE:Aproximación

Publicado por Isaías (5072 intervenciones) el 11/08/2006 19:22:58
A ver, mandame una lista de numeros y un parametro del numero que debo buscar..............
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

RE:Aproximación

Publicado por pedro (5 intervenciones) el 11/08/2006 19:30:11
por ej.

la tabla es:

Nombre Puntos
Pedro 10.936251
Juan 10.256
Pablo 11.023658
Ana 10.936215
Maria 11.95622


Yo quiero que me entregue el nombre de la persona que tiene el puntaje más proximo a 10.9362

En este caso sería Ana que tiene 10.936215.

La idea es que la funcion lo haga y yo no tenga que hacer un algoritmo para calcularlo.
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

RE:Aproximación

Publicado por Isaías (5072 intervenciones) el 11/08/2006 20:31:47
--CREATE TABLE #NOMBRES (NOMBRE VARCHAR(20), PUNTAJE DECIMAL(10,6))
--
--INSERT INTO #NOMBRES VALUES('Pedro', 10.936251 )
--INSERT INTO #NOMBRES VALUES('Juan', 10.256 )
--INSERT INTO #NOMBRES VALUES('Pablo', 11.023658)
--INSERT INTO #NOMBRES VALUES('Ana', 10.936215 )
--INSERT INTO #NOMBRES VALUES('Maria', 11.95622 )
--select * from #NOMBRES where puntaje >= 10.936215 and puntaje <= 10.936215
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

RE:Aproximación

Publicado por pedro (5 intervenciones) el 11/08/2006 21:23:24
--CREATE TABLE #NOMBRES (NOMBRE VARCHAR(20), PUNTAJE DECIMAL(10,6))
--
--INSERT INTO #NOMBRES VALUES('Pedro', 10.936251 )
--INSERT INTO #NOMBRES VALUES('Juan', 10.256 )
--INSERT INTO #NOMBRES VALUES('Pablo', 11.023658)
--INSERT INTO #NOMBRES VALUES('Ana', 10.936215 )
--INSERT INTO #NOMBRES VALUES('Maria', 11.95622 )

Isaias.

El valor que le doy a la sql es de 10.9362 y lo que quiero es que me entregue el valor mas proximo, en este ejemplo sería de "Ana" con 10.936215 por que "Pedro" con 10.936251 tambien tiene una alta aproximación pero la diferencia es favorable a "ana".-

Entonces solo me entrega el recordset con 1 registro(ana).

Gracias.
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

RE:Aproximación

Publicado por Isaías (5072 intervenciones) el 11/08/2006 21:46:24
¿Y no es lo que deseas obtener?, El registro mas PROXIMO....
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

RE:Aproximación

Publicado por Juan (23 intervenciones) el 14/08/2006 22:08:16
Pero me imagino el lo dice para cuando tenga que cambiar el valor. Supon que ahora quiere buscar el mas cercano a 22.456 en esta lista
22.4563, 22.4567, 22.45
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

RE:Aproximación

Publicado por Juan (23 intervenciones) el 14/08/2006 22:08:28
Pero me imagino el lo dice para cuando tenga que cambiar el valor. Supon que ahora quiere buscar el mas cercano a 22.456 en esta lista
22.4563, 22.4567, 22.4569, 22.4569
Los valores a poner en el mayor y el menor son algos complejos.
Mira yo lo que pensaria, no se si te sirva es selaccionar el mayor de los menores y seleccionar el menor de los mayores
Select Max(valor) from tabla where valor < parametro UNION
Select Min(Valor) from tabla where valor > parametro
y uno de esos dos valores es la aproximacion mas exacta
Creo, se me ocurrio ahora y no estoy seguro
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

RE:Aproximación

Publicado por Isaías (5072 intervenciones) el 14/08/2006 23:13:17
Juan

De la lista que envias y el proximo mas cercano (22.456), ¿cual deberia ser la respuesta?
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

Aproximación

Publicado por Hugo QN (1 intervención) el 17/10/2012 22:12:03
Hola Pedro, espero que esto les sirva es un poco largo pero funciona.

CREATE TABLE tab_promedio (valores DECIMAL(12, 7))
INSERT INTO tab_promedio
SELECT 10.012345 UNION
SELECT 10.123456 UNION
SELECT 10.234567 UNION
SELECT 10.345678 UNION
SELECT 10.456789 UNION
SELECT 10.567890
SELECT * FROM tab_promedio
GO
--Empieza aqui
DECLARE @ldc_valor DECIMAL(12, 7)
SET @ldc_valor = 10.29

SELECT aprox FROM (SELECT MAX(VALORES) AS aprox FROM tab_promedio WHERE VALORES < @ldc_valor UNION
SELECT MIN(VALORES) FROM tab_promedio WHERE VALORES > @ldc_valor)a
WHERE abs(aprox - @ldc_valor) = (SELECT MIN(abs(b.aprox - @ldc_valor))
FROM (SELECT MAX(VALORES) AS aprox FROM tab_promedio WHERE VALORES < @ldc_valor UNION
SELECT MIN(VALORES) FROM tab_promedio WHERE VALORES > @ldc_valor)b)

solo asigna el valor y devolverá el aproximado.
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