FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Complicada consulta
Hola compañeros!
No se si se pueda hacer esta consulta o si se deba hacer por separado, pero espero me ayuden. Tengo la siguiente tabla: Cita:
Lo que necesito es hacer una consulta que me arroje el total, partiendo de una fecha y la hora de ese registro y me sume todos los valores que se encuentren hasta el último. Tengo que decir que el movimiento de partida es una apertura que tiene como código 5, Ejemplo: Una apertura con los datos Cita:
Cita:
Estaba pensando en hacer una consulta anidada pero no se ni por donde comenzar, la verdad no soy muy ducho en hacer consultas, pero en hacer normalizaciones de BD me defiendo bastante. Claro esta que hay muchas cosas que mejorar en esta tabla y en la aplicación, pero acepto propuestas, pero primero quiero resolver esto. Gracias de antemano. Última edición por mosorio fecha: 11-08-2003 a las 22:39:05. |
#2
|
|||
|
|||
Hola:
Si a la hora de hacer el registro de cierre, éste debe totalizar todos los registros desde una fecha/Hora hasta el actual, no es complicado de implementar: SELECT SUM(Valor) as TOTAL FROM MOVIMIENTOS WHERE FECHA > :FechaIni OR (FECHA = :FechaIni AND HORA >= :HoraIni) donde le pasas la fecha y hora inicial en los parámetros :FechaIni y :HoraIni. Todo esto suponiendo que sepas la fecha y hora desde la que quieras totalizar y suponiendo que todos los registros introducidos desde esa Fecha/Hora pertenezcan a la misma operación Apertura/Cierre. Otra cosa, si no sabes de antemano la Fecha y Hora inicial, yo haría en primer lugar la subconsulta que me devolviera la última apertura, almacenaría en sendas variables los valores de Fecha y Hora, y luego lanzaría la consulta que te he puesto al principio. Hacer esto mediante una consulta anidada (que repetiría para cada tupla la misma subconsulta, es bastante más lento, salvo que no tengas más remedio que hacerlo así). Si usas tablas planas, puedes lanzar desde Delphi las dos consultas, una detrás de otra. Y si usas motores SQL, lo puedes meter todo dentro de un procedimiento almacenado que se lance a la hora de grabar el cierre, por ejemplo. La siguiente consulta presupone que los registros guardan un orden correlativo (de menor a mayor) en el campo IdMovimiento; si es el campo Registro, lo cambias y ya está. Si ninguno de los dos está en ese orden, habría que buscar la fecha/Hora más reciente (mayor) pero, es algo más complicado porque puede haber dos aperturas el mismo día y habría que emplear algún truco para obtener la mayor (quizás sumando fecha y hora, o bien ordenando el resultado por hora y cogiendo el último registro obtenido) SELECT MAX(IDMOVIMIENTO) as MovIni, FECHA, HORA FROM MOVIMIENTOS WHERE IDTIPOMOV = 5 GROUP BY FECHA, HORA Con esto tenemos la fecha y hora de la última apertura, basta con pasarle ambos parámetros a la consulta inicial; aunque ahora me doy cuenta de que si tenemos ordenada la tabla por idmovimiento, el WHERE de la primera consulta podría basarse en este campo: SELECT SUM(Valor) as TOTAL FROM MOVIMIENTOS WHERE IDMOVIMIENTO >= :MovIni ¿Es esto lo que deseas? Espero no haberte liado con este rollo. Saludos
__________________
Guía de Estilo |
#3
|
|||
|
|||
Hola Andres!
Muchas gracias por la respuesta, no la he probado pero creo que es la idea, ya he encontrado la solución, bueno eso creo, cuando llegue a casa intentare implementarla para obtener lo que necesito, pero primero debo organizar mis ideas. La consulta se puede resolver también asi: Cita:
De todas formas gracias. |
#4
|
|||
|
|||
Bueno, si sabes de antemano la fecha, todo es mucho más fácil. De todas formas ten en cuenta que el arqueo de caja no siempre se va a producir en el mismo día que tuvo la apertura, depende de los horarios de cierre de cada negocio, si cierran más tarde de las 12:00 de la noche, ya estamos en un día diferente. Ya sé que esto no es lo común ni es tu caso, pero es bueno tenerlo en cuenta, como metodología.
Quizás no sea mala idea meter Fecha y Hora en un mismo campo de tipo DateTime, o de tipo TimeStamp, que simplifique los cálculos y comparaciones en las consultas SQL. Visto lo visto, podrías cambiar el título del hilo, y poner Consulta no tan complicada Saludos
__________________
Guía de Estilo |
|
|
|