Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2010
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 22
Toni Va por buen camino
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,
__________________
Saludos,

Bitman
Responder Con Cita
  #2  
Antiguo 08-10-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

¿ Porqué no utilizas esto ? :

select Campo1, abs(Campo1 - :Valor)
from Tabla
order by 2

Naturalmente en tu programa Delphi tendrás que ocultar la segunda columna y solo mostrar la primera.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 08-10-2010
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 22
Toni Va por buen camino
Hola Guillotmarc,

Pues no habia caido en esa posibilidad de utilizar el order by por numero de columna y poner la expresion en la select.

Lo estoy probando y me da un error que no me permite utilizar la funcion abs(), yo diria que la he utilizado en otras ocasiones. Lo estoy probando con FB1.5 y el EMS IB Manager 3. Me da la impresion que es el gestor EMS que no le gusta la funcion y no el propio FB1.5
__________________
Saludos,

Bitman
Responder Con Cita
  #4  
Antiguo 08-10-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Lo he mirado y parece que no es una función interna, sino que está en la UDF ib_udf.dll

Prueba declarándola, ejecutando primero (solo hay que hacerlo una vez) :

DECLARE EXTERNAL FUNCTION abs
DOUBLE PRECISION
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT 'IB_UDF_abs' MODULE_NAME 'ib_udf';


NOTA : Esta declaración es para FB 2.0, espero que no haya cambiado para FB 1.5.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 08-10-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Claro que siempre puedes hacer esta consulta.

select Campo1,
case when (Campo1 - :Valor) > 0 then Campo1 - :Valor else -1 * (Campo1 - :Valor) end
from Tabla
order by 2

Pero la verdad es que es muy feo.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #6  
Antiguo 08-10-2010
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
y no es mejor usar un Between?, lo digo por que es lo que uso en MSSQL, en firebird no sé si está.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Buscar Valores en una Grillla peripla Varios 4 23-03-2009 19:44:31
Valores OldValue RicardoNavarro Firebird e Interbase 1 26-04-2007 17:57:54
regresar valores Genner MS SQL Server 5 03-04-2006 13:55:43
Valores (Predeterminado) vichovi API de Windows 3 04-01-2005 09:40:02
Redondeo de valores JODELSA Varios 1 23-08-2003 18:33:50


La franja horaria es GMT +2. Ahora son las 12:50:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi