FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Ayuda con SQL de manejo de fechas
Tengo una consulta del tipo:
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. |
#2
|
||||
|
||||
No entiendo que quieres hacer.
¿Según el registro ordenar por un campo distinto o qué?
__________________
La Madurez se llama... ~~~Gaia~~~ |
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
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
__________________
La Madurez se llama... ~~~Gaia~~~ |
#5
|
||||
|
||||
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. |
#6
|
||||
|
||||
Cita:
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. |
#7
|
||||
|
||||
¿Qué problema hay en cambiar la Base de Datos si es necesario?
En general los UNION son todo lo contrario a "eficientes" y me parece una solución no-directa para un problema bastante sencillo.
__________________
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. |
#8
|
||||
|
||||
El problema es la intendencia que me requiere este tipo de cambios...
|
#9
|
||||
|
||||
Por partes
Seguramente no te salgan datos por culpa de que no me he molestado en tener en consideración las fechas nulas. Tendrías que ajustar los "where"s individuales para que las fechas nulas las tome como "fechas 0". Neftalí tiene razón, y dado que tendrás que distribuir un ejecutable, siempre puedes crear el campo, si no existe, al iniciar el programa. (Y rellenarlo, para ello seguro que sirve la select que he puesto yo, sin el where final y teniendo en cuenta la posibilidad de los nulos, de esta forma la select solamente la usas una vez, para cargar los datos en el campo [que otra forma sí que no sé]) Edito y añado: Yo tengo esto mismo en un programa, justo después de establecer la conexión (lo que tengo justo después es la llamada al procedimiento, lógicamente) En tu caso debes añadir como rellenar el campo después de crearlo. Saludos
__________________
La Madurez se llama... ~~~Gaia~~~ Última edición por ozsWizzard fecha: 20-03-2013 a las 13:44:51. |
#10
|
||||
|
||||
Al final lo he solucionado así:
Gracias por vuestra ayuda. un saludo. |
#11
|
||||
|
||||
En la solución anterior sobra el distinct, ya que no cumple ninguna función. El campo FECHAR es timestamp y por lo tanto siempre es distinto y hace que si esa factura la conformaron dos personas en el perído de consulta muestre dos registros.
Al principio pensé que era un problema, pero pensandolo bien, como el objetivo de esta consulta es mostrarle al encargado los eventos que se produjeron en un período, no está mal que pueda ver que recibió dos conformidades o rechazos. Saludos. |
#12
|
||||
|
||||
No soy experto en SQL, pero usando una expresión Case en el Order By podría bastar. Hice esta pequeña prueba con una de mis tablas y funcionó:
Como FechaEjecucion puede ser Null, añadiendo "Nulls First", hacemos que la consulta traiga primero los registros que tienen vacío ese campo: En tu caso el Case involucraría tres campos. Sería un poco más grande, pero nada del otro mundo. |
#13
|
||||
|
||||
Con la solución que postee: "order by 1,4" ya funciona correctamente la ordenación. Ordena por el campo FECHAR y FRAS_NUMERO.
Realmente el único "fallo" que le encuentro es que no permite hacer distinc excluyendo FECHAR y que hace que puedan aparecer más de una linea de la misma factura si fue conformada por más de una persona en el período de la consulta. Saludos. |
|
|
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 |
|