Calcular total de horas trabajadas con SQL

03/12/2007 - 13:36 por Francisco J. Lopez | Informe spam
Buen día Amigos,

Tengo una tabla en una BD con la estructura y datos sgtes.:

Nombre Fecha Hora Evento
Juan 05/11/2007 07:00 Entrada
Juan 05/11/2007 12:00 Salida
Juan 05/11/2007 13:00 Entrada
Juan 05/11/2007 18:00 Salida
Juan 05/11/2007 21:00 Entrada
Juan 05/11/2007 23:30 Salida



Que es basicamente el registro del horario de entrada y salida de Juan a su
trabajo.

Mi pregunta es:
Se puede con SQL, de alguna forma, calcular la cantidad de horas trabajadas
por Juan el día 05/11/2007??

Saludos,

Francisco

Preguntas similare

Leer las respuestas

#6 Francisco J. Lopez
06/12/2007 - 12:22 | Informe spam
Estimados,

Lamentablemente la info la leo desde un escáner térmico el cual me sirve los
datos en este formato por lo que me es imposible modificar la estructura de
la tabla.

Saludos,

Francisco

"Carlos M. Calvelo" escribió en el mensaje
news:
Hola Francisco,

On 3 dec, 13:36, "Francisco J. Lopez"
<francisco{@}powersolutions.com.ar> wrote:
Buen día Amigos,

Tengo una tabla en una BD con la estructura y datos sgtes.:

Nombre Fecha Hora Evento
Juan 05/11/2007 07:00 Entrada
Juan 05/11/2007 12:00 Salida
Juan 05/11/2007 13:00 Entrada
Juan 05/11/2007 18:00 Salida
Juan 05/11/2007 21:00 Entrada
Juan 05/11/2007 23:30 Salida



Que es basicamente el registro del horario de entrada y salida de Juan a
su
trabajo.

Mi pregunta es:
Se puede con SQL, de alguna forma, calcular la cantidad de horas
trabajadas
por Juan el día 05/11/2007??




Me tomo la libertad de usar una columna tipo datetime (Fecha)
en vez de tus dos columnas Fecha y Hora. Asi:

Nombre Fecha Evento
Juan 20071105 07:00 Entrada
Juan 20071105 12:00 Salida
... etc.

Ahora podemos crear una vista que transforme esta tabla a otra
así:

Nombre Entrada Salida
Juan 20071105 07:00 20071105 12:00
Juan 20071105 13:00 20071105 18:00
... etc.


-
create view Horario as
select t1.Nombre, t1.Fecha as 'Entrada' ,
(
select max(Fecha)
from T t2
where t2.Nombre = t1.Nombre and
t2.Evento = 'Salida' and
t2.fecha >= t1.Fecha and
t2.fecha <= (
select isnull(min(fecha),
'99991231 23:59:59.998')
from T
where Nombre = t2.Nombre and
Evento = 'Entrada' and
Fecha > t1.Fecha
)
) as 'Salida'
from T t1
where t1.Evento='Entrada'



select cast(sum(datediff(hour,Entrada,Salida)) as varchar) +
':' +
cast(sum(datediff(minute,Entrada,Salida)) % 60 as varchar)
from Horario
where Nombre='Juan' and
Entrada >= '20071105' and
Entrada < '20071106'


Saludos,
Carlos
Respuesta Responder a este mensaje
#7 Carlos M. Calvelo
06/12/2007 - 12:40 | Informe spam
Hola Francisco,

On 6 dec, 12:22, "Francisco J. Lopez"
<francisco{@}powersolutions.com.ar> wrote:
Estimados,

Lamentablemente la info la leo desde un escáner térmico el cual me sirve los
datos en este formato por lo que me es imposible modificar la estructura de
la tabla.




Donde en la vista utilizo la columna Fecha puedes transformar tus
columnas Fecha y Hora para que dé una Fecha (datetime):

Por ejemplo si tu Fecha y Hora son del tipo CHAR puedes hacer algo
así:
cast (Fecha +' '+ Hora as datetime)

Con el tipo datetime será más facil después calcular la diferencia
entre Salidas y Entradas.

Saludos,
Carlos
Respuesta Responder a este mensaje
#8 Carlos M. Calvelo
06/12/2007 - 13:29 | Informe spam
Hola Francisco,

On 6 dec, 12:40, "Carlos M. Calvelo" wrote:
Hola Francisco,

On 6 dec, 12:22, "Francisco J. Lopez"

<francisco{@}powersolutions.com.ar> wrote:
> Estimados,

> Lamentablemente la info la leo desde un escáner térmico el cual me sirve los
> datos en este formato por lo que me es imposible modificar la estructura de
> la tabla.

Donde en la vista utilizo la columna Fecha puedes transformar tus
columnas Fecha y Hora para que dé una Fecha (datetime):




O.. en vez de eso puedes hacer los siguiente:

En la vista que te dí se hace uso de la tabla T.
Digamos que tu tabla original se llama TuTabla.

Mira ahora el resultado de esta vista:

create view T AS
select Nombre,
convert(datetime,fecha+' '+Hora, 103) as Fecha,
Evento
from TuTabla


select * from T

Ahora esta vista (T) es la que se usa como tabla
base en la otra vista.

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida