Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-10-2012
ASUNCION ASUNCION is offline
Miembro
 
Registrado: nov 2010
Posts: 34
Poder: 0
ASUNCION Va por buen camino
Consulta Aproximada

Saludos!

Necesito consultar un registro en una tabla por una fecha y si no existe esta fecha que me devuelva el registro con la fecha proxima a la especificada.

Trabajo con delphi 7 y sql server 2005.

Gracias por adelantado...
Responder Con Cita
  #2  
Antiguo 31-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Desde luego, tienes primero que definir lo que entiendes por fechas próximas. Por ejemplo, esta consulta

Código SQL [-]
select * from tabla where datediff(DAY, fecha, :fecha) < 5

te devolvería los registros que disten menos de cinco días de la fecha indicada en el parámetro :fecha.

Si quieres el más cercano (en días) podrías intentar esto:

Código SQL [-]
select TOP 1 *, datediff(DAY, fecha, :fecha) as diferencia
from tabla
order by diferencia

// Saludos
Responder Con Cita
  #3  
Antiguo 31-10-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola,

asi, de primeras, se me ocurre hacer dos consultas, yo trabajo con Adoquerys.

Código Delphi [-]
Adoquery1.Close;
Adoquery1.SQL.Text:='SELECT * FROM tabla where fecha=#17/01/2012#';
Adoquery1.Open;
if Adoquery1.IsEmpty then
  begin
    Adoquery1.Close;
    Adoquery1.SQL.Text:='SELECT * FROM tabla where fecha<=#17/01/2012# ORDER BY fecha DESC';
    Adoquery1.Open;
  end;
showmessage(Adoquery1.FieldByName('Codigo').AsString);

Espero que te sirva de ayuda.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #4  
Antiguo 31-10-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Bueno, se me adelantó roman.

Además con la opción que te indica roman te muestra la más cercana tanto por arriba como por abajo, en mi propuesta te muestra la más cercana pero siempre inferior a la que introduces como parametro.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #5  
Antiguo 31-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ElDioni Ver Mensaje
Además con la opción que te indica roman te muestra la más cercana tanto por arriba como por abajo
Ahora que lo mencionas, veo que datediff devuelve positivo o negativo según si la primera fecha es anterior a la segunda o no; así que habrá que tener cuidado con eso, porque la menor podría ser la más lejana

Habría que añadir una condición de que datediff > 0.

// Saludos
Responder Con Cita
  #6  
Antiguo 31-10-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

En Firebird haría la consulta así.

Igual o próximo anterior:
Código SQL [-]
SELECT FIRST 1 * FROM TABLA
WHERE FECHA  <= :FECHA
ORDER BY FECHA DESC

Igual o próximo posterior:
Código SQL [-]
SELECT FIRST 1 * FROM TABLA
WHERE FECHA  >= :FECHA
ORDER BY FECHA

Por lo que indico roman, creo que el equivalente en MS SQL Server del FIRST 1 de Firebird, es TOP 1, así que tendrías que hacer el reemplazo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 31-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ecfisa Ver Mensaje
Por lo que indico roman, creo que el equivalente en MS SQL Server del FIRST 1 de Firebird, es TOP 1
En realidad, lo indicó el w3schools

Creo que tu consulta es más eficiente ya que restringes los registros resultantes desde el select.

// Saludos
Responder Con Cita
  #8  
Antiguo 31-10-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Bueno, lo que si es cierto es que sigo en cabeza con la peor opción.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #9  
Antiguo 31-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ja, ja. No lo veas así. Tu opción y la de ecfisa son esencialmente iguales. La diferencia es que él selecciona el primer registro desde la consulta, evitando así el viaje de registros innecesarios hacia el cliente.

// Saludos
Responder Con Cita
  #10  
Antiguo 31-10-2012
ASUNCION ASUNCION is offline
Miembro
 
Registrado: nov 2010
Posts: 34
Poder: 0
ASUNCION Va por buen camino
Consulta Sql

Tengo suficiente opciones escogeré la mejor...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
busqueda aproximada Zeos eduardo s. Varios 2 17-09-2008 14:50:45
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 02-10-2007 00:19:44
Consulta dentro de otra consulta judit25 Conexión con bases de datos 1 25-06-2007 16:52:15
Escoger fecha Aproximada Carlex SQL 3 17-05-2006 15:56:55
Mejor suma aproximada Lepe Varios 15 16-01-2006 17:03:28


La franja horaria es GMT +2. Ahora son las 10:14:17.


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