AUXILIO!!! Como sumar tiempos?

06/06/2006 - 17:56 por Jorge Reyes | Informe spam
Hola a todos, esperando que todos esten bien quiero pedirles su ayuda para
que alguien me pueda indicar como obtener una sumatoria de tiempo, brevemente
les describo la situación.
Tenemos una muestra de la tabla: U_EVENTOS_TIEMPOS

cFechaAl cFechaOk FAxDia FAxHora
2006-05-26 13:30:08 2006-05-26 13:45:03 0 00:14:55
2006-05-26 13:31:42 2006-05-29 10:57:08 2 21:25:26
2006-05-26 13:31:59 NULL 10 21:02:57

las columnas FaxDia y FAxHora son la resta de las columnas cFechaOk -
cFechaAl y representan el tiempo transcurrido en días y horas (minutos y
segundos) respectivamente. Ahora bien lo que deseo hacer es sumar toda la
columna FAxHora y FAxDia para obtener un GRAN TOTAL (que por ejemplo en este
caso el resultado sería aprox. 14 dias 00:41:09 no?). Como puedo lograrlo???
Muchisimas gracias espero que me puedan ayudar lo antes posible. Saludos!!!

Preguntas similare

Leer las respuestas

#1 Maxi
06/06/2006 - 18:01 | Informe spam
Hola, que tipo de datos son esas columnas???


Salu2

Maxi [Microsoft MVP SQL Server]
Culminis Speaker
www.sqlgurus.org

"Jorge Reyes" wrote in message
news:
Hola a todos, esperando que todos esten bien quiero pedirles su ayuda para
que alguien me pueda indicar como obtener una sumatoria de tiempo,
brevemente
les describo la situación.
Tenemos una muestra de la tabla: U_EVENTOS_TIEMPOS

cFechaAl cFechaOk FAxDia FAxHora
2006-05-26 13:30:08 2006-05-26 13:45:03 0 00:14:55
2006-05-26 13:31:42 2006-05-29 10:57:08 2 21:25:26
2006-05-26 13:31:59 NULL 10 21:02:57

las columnas FaxDia y FAxHora son la resta de las columnas cFechaOk -
cFechaAl y representan el tiempo transcurrido en días y horas (minutos y
segundos) respectivamente. Ahora bien lo que deseo hacer es sumar toda la
columna FAxHora y FAxDia para obtener un GRAN TOTAL (que por ejemplo en
este
caso el resultado sería aprox. 14 dias 00:41:09 no?). Como puedo
lograrlo???
Muchisimas gracias espero que me puedan ayudar lo antes posible.
Saludos!!!
Respuesta Responder a este mensaje
#2 Jorge Reyes
06/06/2006 - 18:38 | Informe spam
Hola!! bueno U_EVENTOS_TIEMPOS en realidad es una vista, el tipo de datos de
todas las columnas es varchar.

"Maxi" escribió:

Hola, que tipo de datos son esas columnas???


Salu2

Maxi [Microsoft MVP SQL Server]
Culminis Speaker
www.sqlgurus.org

"Jorge Reyes" wrote in message
news:
> Hola a todos, esperando que todos esten bien quiero pedirles su ayuda para
> que alguien me pueda indicar como obtener una sumatoria de tiempo,
> brevemente
> les describo la situación.
> Tenemos una muestra de la tabla: U_EVENTOS_TIEMPOS
>
> cFechaAl cFechaOk FAxDia FAxHora
> 2006-05-26 13:30:08 2006-05-26 13:45:03 0 00:14:55
> 2006-05-26 13:31:42 2006-05-29 10:57:08 2 21:25:26
> 2006-05-26 13:31:59 NULL 10 21:02:57
>
> las columnas FaxDia y FAxHora son la resta de las columnas cFechaOk -
> cFechaAl y representan el tiempo transcurrido en días y horas (minutos y
> segundos) respectivamente. Ahora bien lo que deseo hacer es sumar toda la
> columna FAxHora y FAxDia para obtener un GRAN TOTAL (que por ejemplo en
> este
> caso el resultado sería aprox. 14 dias 00:41:09 no?). Como puedo
> lograrlo???
> Muchisimas gracias espero que me puedan ayudar lo antes posible.
> Saludos!!!


Respuesta Responder a este mensaje
#3 Maxi
06/06/2006 - 19:01 | Informe spam
mmm, bueno ya tenemos serios problemas, varchar no es el tipo de datos para
guardar horas, el tipo de datos para guardar horas es Datetime.
Entonces como primer paso hay que convertir todas estas columnas en la query
a datetime, eso lo hacemos con Convert o Cast.
Entonces, en faxdia que tenemos realmente? solo dias? y horas ademas de la
cantidad de dias la hora? es muy complicado tu disenio, si podrias ampliar
un poco o darnos los script de las tablas seria mas simple de entender




Salu2

Maxi [Microsoft MVP SQL Server]
Culminis Speaker
www.sqlgurus.org

"Jorge Reyes" wrote in message
news:
Hola!! bueno U_EVENTOS_TIEMPOS en realidad es una vista, el tipo de datos
de
todas las columnas es varchar.

"Maxi" escribió:

Hola, que tipo de datos son esas columnas???


Salu2

Maxi [Microsoft MVP SQL Server]
Culminis Speaker
www.sqlgurus.org

"Jorge Reyes" wrote in message
news:
> Hola a todos, esperando que todos esten bien quiero pedirles su ayuda
> para
> que alguien me pueda indicar como obtener una sumatoria de tiempo,
> brevemente
> les describo la situación.
> Tenemos una muestra de la tabla: U_EVENTOS_TIEMPOS
>
> cFechaAl cFechaOk FAxDia FAxHora

> 2006-05-26 13:30:08 2006-05-26 13:45:03 0 00:14:55
> 2006-05-26 13:31:42 2006-05-29 10:57:08 2 21:25:26
> 2006-05-26 13:31:59 NULL 10 21:02:57
>
> las columnas FaxDia y FAxHora son la resta de las columnas cFechaOk -
> cFechaAl y representan el tiempo transcurrido en días y horas (minutos
> y
> segundos) respectivamente. Ahora bien lo que deseo hacer es sumar toda
> la
> columna FAxHora y FAxDia para obtener un GRAN TOTAL (que por ejemplo en
> este
> caso el resultado sería aprox. 14 dias 00:41:09 no?). Como puedo
> lograrlo???
> Muchisimas gracias espero que me puedan ayudar lo antes posible.
> Saludos!!!


Respuesta Responder a este mensaje
#4 Jorge Reyes
06/06/2006 - 19:41 | Informe spam
Ok antes que nada mil gracias, todo empieza aquí, tengo la tabla CAT_EVENTOS
que tiene los campos:

iIdEvt int
cFechaAl varchar
cIpEquipo varchar
cFechaOk varchar
cIdAlert char
cDescAlert char
iIdPrioridad int
cTipoElemento char
cFechaReg varchar

y entonces tengo que los campos cFechaAl y cFechaOk me indican el inicio y
el reestablecimiento de la falla respectivamente, el campo cIpEquipo me dice
que elemento de la red es el que ha fallado, entonces hice una vista que
relaciona el campo cIpEquipo con la informacion general del elemento de la
red que tengo en otras tablas y al final obtengo la siguiente vista (tabla)
UEVENTOS_UTIENDA_REGION_EQUIPO:

iIdEvt int
cFechaAl varchar
cIpEquipo varchar
cFechaOk varchar
cRegion char
cNumEcoTienda char
cNombreTienda char
cTipoTienda char
cDescAlert char
cIdAlert char

Hasta aquí, no he hecho nada con los valores de los campos, concretamente
los campos
cFechaAl y cFechaOk siguen teniendo los valores originales (que tenían en
CAT_EVENTOS), ahora bien hice una nueva vista que se llama U_EVENTOS_TIEMPOS
con los siguiente campos:

cRegion varchar
cNombreTienda varchar
cTipoTienda varchar
cNumEcoTienda varchar
cIpEquipo varchar
cFechaAl varchar
cFechaOk varchar
FAxDia varchar
FAxHora char

y aqui si hice la resta de los campos cFechaOk - cFechaAl para llenar los
campos FAxDia y FAxHora, la vista la hice de la siguiente manera:

SELECT LTRIM(RTRIM(cRegion)) AS 'cRegion',
LTRIM(RTRIM(cNombreTienda)) AS 'cNombreTienda',
LTRIM(RTRIM(cTipoTienda)) AS 'cTipoTienda',
LTRIM(RTRIM(cNumEcoTienda)) AS 'cNumEcoTienda',
LTRIM(RTRIM(cIpEquipo)) AS 'cIpEquipo',
cFechaAl,
CASE WHEN cFechaOk IS NULL THEN 'SIN REESTABLECER' ELSE cFechaOk END AS
'cFechaOk',
CASE WHEN
LTRIM(RTRIM(CONVERT(CHAR,CONVERT(INT,SUBSTRING(
CONVERT(CHAR,CONVERT(DATETIME,cFechaOk) -
CONVERT(DATETIME,cFechaAl),102),9,2)) -
CONVERT(INT,SUBSTRING( CONVERT(CHAR,CONVERT(DATETIME,cFechaAl) -
CONVERT(DATETIME,cFechaAl),102),9,2)))))
IS NULL THEN
LTRIM(RTRIM(CONVERT(CHAR,CONVERT(INT,SUBSTRING(
CONVERT(CHAR,CONVERT(DATETIME,GETDATE()) -
CONVERT(DATETIME,cFechaAl),102),9,2)) -
CONVERT(INT,SUBSTRING( CONVERT(CHAR,CONVERT(DATETIME,cFechaAl) -
CONVERT(DATETIME,cFechaAl),102),9,2)))))
ELSE
LTRIM(RTRIM(CONVERT(CHAR,CONVERT(INT,SUBSTRING(
CONVERT(CHAR,CONVERT(DATETIME,cFechaOk) -
CONVERT(DATETIME,cFechaAl),102),9,2)) -
CONVERT(INT,SUBSTRING( CONVERT(CHAR,CONVERT(DATETIME,cFechaAl) -
CONVERT(DATETIME,cFechaAl),102),9,2)))))
END AS 'FAxDia',
CASE WHEN
CONVERT(CHAR,CONVERT(DATETIME,cFechaOk) - CONVERT(DATETIME,cFechaAl),108)
IS NULL THEN
CONVERT(CHAR,CONVERT(DATETIME,GETDATE()) - CONVERT(DATETIME,cFechaAl),108)
ELSE
CONVERT(CHAR,CONVERT(DATETIME,cFechaOk) - CONVERT(DATETIME,cFechaAl),108)
END AS 'FAxHora'
FROM UEVENTOS_UTIENDA_REGION_EQUIPO

y ahora finalmente lo que deseo hacer es sumar todos los tiempos
(subtotales) para obtener un tiempo total de fallas (gran total) y despues
tengo que aplicarle una formula para obtener un porcentaje de disponibilidad
del elemento, jejeje pero bueno no se, seguramente mi diseño no esta bien, la
cuestion es que necesitan que les entregue un reporte que diga en un periodo
de tiempo solicitado, cuantos dias, horas, minutos y segundos estuvieron
fuera los elementos. Asi que pues ahi esta la cosa. Espero que me puedan
ayudar. Mil Gracias!!!
Respuesta Responder a este mensaje
#5 Alejandro Mesa
06/06/2006 - 20:54 | Informe spam
Jorge,

Puedes usar la vista como fuente de la sentencia select, pero debes
convertir a fecha esos valores y calcular el valor de cFechaOk para la fila
donde cFechaOk es NULL.

select
sum(datediff(second, FechaAl, FechaOk)) / (24 * 60 * 60) as dias,
(sum(datediff(second, FechaAl, FechaOk)) % (24 * 60 * 60)) / (3600) as horas,
((sum(datediff(second, FechaAl, FechaOk)) % (24 * 60 * 60)) % (3600)) /
(60) as minutos,
((sum(datediff(second, FechaAl, FechaOk)) % (24 * 60 * 60)) % (3600)) %
(60) as segundos
from
(
select
cast(cFechaAl as datetime) as FechaAl,
isnull(cast(cFechaOk as datetime), dateadd(second, (FAxDia * 24 * 60 *
60) + datediff(second, convert(varchar(10), getdate(), 126),
convert(varchar(10), getdate(), 126) + 'T' + FAxHora), cast(cFechaAl as
datetime))) as FechaOk
from
v1 -- AQUI PON EL NOMBRE DE LA VISTA
) as t
go


Ejemplo:

use northwind
go

create table t1 (
cFechaAl varchar(25),
cFechaOk varchar(25),
FAxDia int,
FAxHora varchar(8)
)
go

insert into t1 values('2006-05-26 13:30:08', '2006-05-26 13:45:03', 0,
'00:14:55')
insert into t1 values('2006-05-26 13:31:42', '2006-05-29 10:57:08', 2,
'21:25:26')
insert into t1 values('2006-05-26 13:31:59', NULL, 10, '21:02:57')
go

select
sum(datediff(second, FechaAl, FechaOk)) / (24 * 60 * 60) as dias,
(sum(datediff(second, FechaAl, FechaOk)) % (24 * 60 * 60)) / (3600) as horas,
((sum(datediff(second, FechaAl, FechaOk)) % (24 * 60 * 60)) % (3600)) /
(60) as minutos,
((sum(datediff(second, FechaAl, FechaOk)) % (24 * 60 * 60)) % (3600)) %
(60) as segundos
from
(
select
cast(cFechaAl as datetime) as FechaAl,
isnull(cast(cFechaOk as datetime), dateadd(second, (FAxDia * 24 * 60 *
60) + datediff(second, convert(varchar(10), getdate(), 126),
convert(varchar(10), getdate(), 126) + 'T' + FAxHora), cast(cFechaAl as
datetime))) as FechaOk
from
t1
) as t
go

drop table t1
go

Resultado:

dias horas minutos segundos
13 18 43 18

(1 row(s) affected)


AMB


"Jorge Reyes" wrote:

Hola a todos, esperando que todos esten bien quiero pedirles su ayuda para
que alguien me pueda indicar como obtener una sumatoria de tiempo, brevemente
les describo la situación.
Tenemos una muestra de la tabla: U_EVENTOS_TIEMPOS

cFechaAl cFechaOk FAxDia FAxHora
2006-05-26 13:30:08 2006-05-26 13:45:03 0 00:14:55
2006-05-26 13:31:42 2006-05-29 10:57:08 2 21:25:26
2006-05-26 13:31:59 NULL 10 21:02:57

las columnas FaxDia y FAxHora son la resta de las columnas cFechaOk -
cFechaAl y representan el tiempo transcurrido en días y horas (minutos y
segundos) respectivamente. Ahora bien lo que deseo hacer es sumar toda la
columna FAxHora y FAxDia para obtener un GRAN TOTAL (que por ejemplo en este
caso el resultado sería aprox. 14 dias 00:41:09 no?). Como puedo lograrlo???
Muchisimas gracias espero que me puedan ayudar lo antes posible. Saludos!!!
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida