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 20-03-2013
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
Ayuda con SQL de manejo de fechas

Tengo una consulta del tipo:
Código Delphi [-]
    SQL.Clear;
    SQL.Add('select * from FRAS');
    SQL.Add('where ');
    SQL.Add('   cast(FRAS_CONF1_DATA as date) > '+#39+FormatDateTime('mm/dd/yyyy',now()-30)+#39);
    SQL.Add('or cast(FRAS_CONF2_DATA as date) > '+#39+FormatDateTime('mm/dd/yyyy',now()-30)+#39);
    SQL.Add('or cast(FRAS_CONF3_DATA as date) > '+#39+FormatDateTime('mm/dd/yyyy',now()-30)+#39);
    SQL.Add('order by FRAS_CONF1_DATA, FRAS_CONF2_DATA, FRAS_CONF3_DATA');
donde FRAS_CONF1_DATA,FRAS_CONF2_DATA,FRAS_CONF3_DATA son timestamp.
Lo que necesito es ordenar la consulta por estos 3 campos pero teniendo en cuenta que dependiendo del registro cualquiera de ellos puede ser el más antiguo.
Alguien puede echarme una mano con esto?.
Gracias de antemano.
Un saludo.
Responder Con Cita
  #2  
Antiguo 20-03-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
No entiendo que quieres hacer.

¿Según el registro ordenar por un campo distinto o qué?
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #3  
Antiguo 20-03-2013
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
Haber si soy capaz de explicarlo bien...
Estos tres campos de fecha guardan el momento en que una factura fue conformada (dada como conforme) o no. Cada factura puede asignarse hasta un máximo de tres personas para que den la conformidad en cascada, es decir, si se asigna a dos personas la primera (FRAS_CONF1_DATA) no puede conformar hasta que está conformada por la segunda (FRAS_CONF2_DATA).
Lo que necesito es recuperar las conformaciones producidas en los últimos 30 días, que es lo que hace el sql que puse en el anterior post, y después ordenar el resultado para que las que tuvieron un evento más reciente aparezcan arriba.
Espero que ahora está más claro.
Un saludo.
Responder Con Cita
  #4  
Antiguo 20-03-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
Sigo sin entenderte del todo, no sé si me he aclarado o me he confundido más.

Suponiendo que sea lo que yo he entendido. Tienes tres campo "fecha" y te interesa ordenar por la fecha (cualquiera de las tres) más baja

Código Delphi [-]
      q.SQL.Add('SELECT [campos], FECHA');
      q.SQL.Add('FROM (');
      q.SQL.Add('   SELECT [campos], FRAS_CONF1_DATA AS FECHA');
      q.SQL.Add('   FROM FRAS');
      q.SQL.Add('   WHERE FRAS_CONF1_DATA < FRAS_CONF2_DATA');
      q.SQL.Add('     AND FRAS_CONF1_DATA < FRAS_CONF3_DATA');
      q.SQL.Add('   UNION');
      q.SQL.Add('   SELECT [campos], FRAS_CONF2_DATA as fecha');
      q.SQL.Add('   FROM FRAS');
      q.SQL.Add('   WHERE FRAS_CONF2_DATA < FRAS_CONF1_DATA');
      q.SQL.Add('     AND FRAS_CONF2_DATA < FRAS_CONF3_DATA');
      q.SQL.Add('   UNION');
      q.SQL.Add('   SELECT [campos], FRAS_CONF3_DATA as fecha');
      q.SQL.Add('   FROM FRAS');
      q.SQL.Add('   WHERE FRAS_CONF3_DATA < FRAS_CONF1_DATA');
      q.SQL.Add('     AND FRAS_CONF3_DATA < FRAS_CONF3_DATA');
      q.SQL.Add('   UNION');
      q.SQL.Add('   SELECT [campos], FRAS_CONF1_DATA as fecha');
      q.SQL.Add('   FROM FRAS');
      q.SQL.Add('   WHERE FRAS_CONF1_DATA = FRAS_CONF2_DATA');
      q.SQL.Add('     AND FRAS_CONF1_DATA < FRAS_CONF3_DATA');
      q.SQL.Add('   UNION');
      q.SQL.Add('   SELECT [campos], FRAS_CONF1_DATA as fecha');
      q.SQL.Add('   FROM FRAS');
      q.SQL.Add('   WHERE FRAS_CONF1_DATA = FRAS_CONF3_DATA');
      q.SQL.Add('     AND FRAS_CONF1_DATA < FRAS_CONF2_DATA');
      q.SQL.Add('   UNION');
      q.SQL.Add('   SELECT [campos], FRAS_CONF2_DATA as fecha');
      q.SQL.Add('   FROM FRAS');
      q.SQL.Add('   WHERE FRAS_CONF2_DATA = FRAS_CONF3_DATA');
      q.SQL.Add('     AND FRAS_CONF2_DATA < FRAS_CONF1_DATA');
      q.SQL.Add(')');
      q.SQL.Add('CAST(FECHA AS DATE) > ' +#39 + FormatDateTime('mm/dd/yyyy',now()-30)+#39);
      q.SQL.Add('ORDER BY FECHA');
      //[campo] = Lista de campos
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #5  
Antiguo 20-03-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.339
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No se si te he entendido bien....

¿Quieres ordenar la consulta de forma que te ordene los registros, pero no por un campo, sino por el valor más antiguo (o nuevo) que exista en cualquiera de esos tres?
¿Es decir que el valor de ordenación sea el más antiguo/nuevo de los tres campos?

Si es así, yo crearía un campo FECHA_CONF_CAL (que se calcule y mantenga por trigger) que almacene y que mantenga el más antiguo o más nuevo de los tres.
Después sólo debes usar ese campo para las ordenaciones.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 20-03-2013
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 22
apicito Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Si es así, yo crearía un campo FECHA_CONF_CAL (que se calcule y mantenga por trigger) que almacene y que mantenga el más antiguo o más nuevo de los tres.
Gracias por la respuesta.
Ya había pensado en esto pero pretendía hacerlo sin modificar la base de datos por lo que implicaría a efectos de actualización de todos mis clientes.
Estoy probando la solución de ozsWizzard. Ya no me da errores, pero tampoco me devuelve ningún registro. En algún sitio me estoy equivocando. Ya os diré.
Otra solución en la que habia pensado era en la de utilizar algo como un campo calculado en el que almacenar el valor más reciente de los tres. Pero no sabría como hacerlo.
Sigo con la solución de ozsWizzard.
Por cierto, si, has entendido perfectamente mi problema.Saludos.
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
Manejo de Fechas de vencimiento en delphi 7 luisraad Varios 92 11-04-2013 23:33:40
Ayuda sobre manejo de fechas francodelphi Conexión con bases de datos 12 27-10-2011 01:22:15
Manejo de Fechas en Firebird 2.1 Jose Roman SQL 3 17-02-2009 17:15:03
Manejo de fechas nazly Varios 2 14-03-2008 19:05:23
Manejo de fechas Leogiro OOP 2 11-09-2004 00:22:39


La franja horaria es GMT +2. Ahora son las 20:03:54.


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