| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Bitman Lt

Registrado: 30 Mar 2004Mensajes: 80
|
Publicado: Jue 07 Oct, 2010 11:18 pm Asunto: Buscar valores mas cercanos |
|
|
Hola compañeros,
Tengo la necesidad de buscar en una tabla (firebird) por un campo que es numerico y tengo que buscar en un momento determinado los valores mas 'proximos'. Por proximos quiero decir los valores que se hacercan mas a un valor, tanto por delante como por detras.
Ejemplo:
Si tengo una tabla con el campo1 de tipo integer y con estos datos.
Campo1
-------
1
2
3
4
5
6
7
8
9
10
Como podria buscar o obtener la tabla ordenada por el criterio de proximidad a un valor, por ejemplo del 5:
Campo1
--------
4
6
7
3
8
2
9
1
10
En otros servidores SQL me permite realizar una consulta donde la clausula order by puedo poner una expresion con un calculo y esto permite obtener el resultado deseado:
select Campo1 from Tabla
order by abs(Campo1 - :Valor)
Lo que no se como realizar esto en firebird.
Saludos, |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 12 Nov, 2010 9:11 am Asunto: |
|
|
A bote pronto se me courre que tal vez te valga algo así:
| Código: | SELECT Campo1 FROM Tabla WHERE ABS(Campo1 - :Valor) <= :Valor |
No lo he probado, pero se me ocurre que puede ser una posible solución. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Bitman Lt

Registrado: 30 Mar 2004Mensajes: 80
|
Publicado: Mar 30 Nov, 2010 3:01 pm Asunto: |
|
|
Hola Angel,
Finalmente he utilizado la siguiente consulta:
| Código: | select Campo1,
case when (Campo1 - :Valor) > 0 then Campo1 - :Valor else -1 * (Campo1 - :Valor) end
from Tabla
order by 2 |
Ya que estoy utilizando FB1.5 y la funcion ABS no esta integrada.
Muchas gracias
Saludos, |
|
| Volver arriba |
|
 |
|