Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Cálculos con fechas (https://www.clubdelphi.com/foros/showthread.php?t=55671)

astarett 23-04-2008 18:55:30

Cálculos con fechas
 
Que tal amigos! Veo que hay muchos Gurus por aqui en SQL, yo llevo poco tiempo y aun no entiendo muchas cosas "avanzadas" Ahorita tengo un problema ojala puedan ayudarme.

Tengo dos fechas de ordenes de compra una cuando el cliente la pide a un proveedor y una cuando el proveedor aceptó la orden de compra. Las fechas están en dos tablas diferentes una se llama OrdenCompra y otra se llama BitacoraTransaccion.

Los campos donde se encuentran las fechas son

OrdenCompra.ocp_FechaRealizada Esta contiene la fecha en que se realizó
la orden de compra.

BitacoraTransaccion.btr_FeEstado Esta contiene la fecha cuando cambio del
estado de revisada a aceptada


La consulta que hago es la siguiente:

Código SQL [-]
 
Select OrdenCompra.ocp_FechaRealizada,
BitacoraTransaccion.btr_FeEstado
from OrdenCompra, BitacoraTransaccion
where OrdenCompra.ocp_FechaRealizada between '2008-04-01' and '2008-04-30' 
and BitacoraTransaccion.btr_FeEstado between '2008-04-01' and '2008-04-30'
and (BitacoraTransaccion.EstadoOperacionID = 13 or BitacoraTransaccion.EstadoOperacionID = 24)
and OrdenCompra.EstadoOperacionID = 1

Cuando OrdenCompra.EstadoOperacionID = 1 Quiere decir que la acaba de
realizar el cliente
Cuando EstadoOperacionID = 24 o 13 es un estatus de que ha sido
aceptada la orden de compra

Y me trae los resultados que quiero algo asi:

OrdenCompra.ocp_FechaRealizada BitacoraTransaccion.btr_FeEstado
2008-04-06 20:22:37.000 2008-04-07 11:52:54.000
2008-04-06 21:19:00.000 2008-04-08 14:19:21.000
2008-04-06 22:00:15.000 2008-04-07 08:50:51.000


Ahora lo que quiero hacer es calcular el tiempo en horas que se tardo el proveedor en aceptar la orden de compra desde que se Realizo la orden de compra, pero de cada una de las fechas mostradas, ya que cada fecha pertenece a una unica orden de compra diferente de la otra.

Tengo un script donde puedo calcular eso, pero solo comparando dos fechas, una contra otra, y si tuviera 100 fechas para comparar me tardaria horas. En si lo que quiero es que se puedan comparar todas las fechas y me de el resultado de cada comparación.

Alguien sabe como? Agradezco su ayuda señores.

BlueSteel 23-04-2008 19:08:47

Cita:

Empezado por astarett (Mensaje 282024)
Que tal amigos! Veo que hay muchos Gurus por aqui en SQL, yo llevo poco tiempo y aun no entiendo muchas cosas "avanzadas" Ahorita tengo un problema ojala puedan ayudarme.

Tengo dos fechas de ordenes de compra una cuando el cliente la pide a un proveedor y una cuando el proveedor aceptó la orden de compra. Las fechas están en dos tablas diferentes una se llama OrdenCompra y otra se llama BitacoraTransaccion.

Los campos donde se encuentran las fechas son

OrdenCompra.ocp_FechaRealizada Esta contiene la fecha en que se realizó
la orden de compra.

BitacoraTransaccion.btr_FeEstado Esta contiene la fecha cuando cambio del
estado de revisada a aceptada


La consulta que hago es la siguiente:


Código SQL [-]
Select OrdenCompra.ocp_FechaRealizada,
BitacoraTransaccion.btr_FeEstado
from OrdenCompra, BitacoraTransaccion
where OrdenCompra.ocp_FechaRealizada between '2008-04-01' and '2008-04-30'
and BitacoraTransaccion.btr_FeEstado between '2008-04-01' and '2008-04-30'
and (BitacoraTransaccion.EstadoOperacionID = 13 or BitacoraTransaccion.EstadoOperacionID = 24)
and OrdenCompra.EstadoOperacionID = 1





Cuando OrdenCompra.EstadoOperacionID = 1 Quiere decir que la acaba de
realizar el cliente
Cuando EstadoOperacionID = 24 o 13 es un estatus de que ha sido
aceptada la orden de compra

Y me trae los resultados que quiero algo asi:

OrdenCompra.ocp_FechaRealizada BitacoraTransaccion.btr_FeEstado
2008-04-06 20:22:37.000 2008-04-07 11:52:54.000
2008-04-06 21:19:00.000 2008-04-08 14:19:21.000
2008-04-06 22:00:15.000 2008-04-07 08:50:51.000


Ahora lo que quiero hacer es calcular el tiempo en horas que se tardo el proveedor en aceptar la orden de compra desde que se Realizo la orden de compra, pero de cada una de las fechas mostradas, ya que cada fecha pertenece a una unica orden de compra diferente de la otra.

Tengo un script donde puedo calcular eso, pero solo comparando dos fechas, una contra otra, y si tuviera 100 fechas para comparar me tardaria horas. En si lo que quiero es que se puedan comparar todas las fechas y me de el resultado de cada comparación.

Alguien sabe como? Agradezco su ayuda señores.


Hola astarett

Primero que nada, Bienvenido al Club... Te invito a leer la guia de estilo

Te aconcejo que no dupliques tus hilos, ya que estos pueden ser ignorados...

Salu2:p:D

ContraVeneno 23-04-2008 19:33:39

SQL Server tiene la función "DateDiff" la cuál te da la diferencia desde años hasta milisegundos, según lo que escojas.

Pero como no mencionas que motor de base de datos estas utilizando, pues no sabría decir más opciones.

astarett 23-04-2008 22:49:24

Sobre el calculo de fechas.
 
Cita:

Empezado por ContraVeneno (Mensaje 282039)
SQL Server tiene la función "DateDiff" la cuál te da la diferencia desde años hasta milisegundos, según lo que escojas.

Pero como no mencionas que motor de base de datos estas utilizando, pues no sabría decir más opciones.

Gracias ContraVeneno, uso SQL Server 2000, y esa funcion DateDiff la uso, pero lo que pasa es que solo puedo hacer con esa función una comparación con 2 fechas, y lo que quiero en realidad es hacer la comparacion con todas las fechas que me traiga la consulta previa que hice. Ejemplo, si tengo 2 pares de fechas para comparar 2008-01-01 2088-03-14 comparar esa, y luego el par que sigue, y asi sucesivamente con todas las fechas que me arroje la consulta.

Agradezco tu atención.

ContraVeneno 23-04-2008 23:37:44

:confused::confused:

Pues no le veo lo complicado y no se porque dices que no te funciona...

Código SQL [-]
Select U.UnaFecha, O.OtraFecha, datediff(ff, U.unafecha, O.otrafecha) as DiferenciaEnHoras
From unaTabla U
join otraTabla O on U.ID = O.ID
where U.UnaFecha between '2008-01-01 00:00:00' and '2008-01-30 23:59:59'
Order by U.UnaFecha

Esa consulta me compara una fecha contra la otra cada vez. Si son 20 fechas, me compara 20 veces. Si es una, me compara una, si son 3, pues 3.
:confused:

astarett 24-04-2008 07:28:13

Cita:

Empezado por ContraVeneno (Mensaje 282123)
:confused::confused:

Pues no le veo lo complicado y no se porque dices que no te funciona...

Código SQL [-]Select U.UnaFecha, O.OtraFecha, datediff(ff, U.unafecha, O.otrafecha) as DiferenciaEnHoras From unaTabla U join otraTabla O on U.ID = O.ID where U.UnaFecha between '2008-01-01 00:00:00' and '2008-01-30 23:59:59' Order by U.UnaFecha


Esa consulta me compara una fecha contra la otra cada vez. Si son 20 fechas, me compara 20 veces. Si es una, me compara una, si son 3, pues 3.
:confused:

Pues gracias por la ayuda, algo tiene el SQL server de mi empresa porque en casa lo probe y si me compara todas las fechas, esta raro ese asunto. Gracias por la ayuda amigo.


La franja horaria es GMT +2. Ahora son las 19:06:01.

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