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

#1 Cristian Meneses
03/12/2007 - 13:51 | Informe spam
Hola Francisco
Yo lo he resuelto convirtiendo a segundos, y haciendolo negativo para
entradas y positivo para salidas, de tal forma que en la sumatoria de
los segundos totales.
DATEDIFF(s, CAST('00:00:00'AS datetime), CAST(Hora as datetime))

Luego solo debes convertir los segundos al formato horas, ahi va la
funcion

CREATE FUNCTION [dbo].[FormatHora]
(@Segundos float)
RETURNS varchar(50) AS
BEGIN
DECLARE @RES VARCHAR(50)
DECLARE @HORAS FLOAT
DECLARE @MINS FLOAT
DECLARE @SEGS FLOAT
DECLARE @RESTO FLOAT

SET @HORAS = @Segundos /60/60
SET @RESTO = @HORAS - FLOOR(@HORAS)
SET @HORAS = FLOOR(@HORAS)

SET @MINS = @RESTO * 60
SET @RESTO = @MINS - FLOOR(@MINS)
SET @MINS = FLOOR(@MINS)

SET @SEGS = @RESTO * 60

SET @RES = CAST(@HORAS as varchar) + ':' + right('00'+cast(@MINS as
varchar),2) + ':' + right('00'+cast(@segs as varchar),2)
RETURN @RES
END

Espero que te sirva, saludos


Cristian Meneses
Respuesta Responder a este mensaje
#2 Maxi Accotto
05/12/2007 - 01:00 | Informe spam
Hola, exponga por favor la DDL de la tabla, que tipo de datos es hora? que
tipo de dato es fecha?


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Francisco J. Lopez" <francisco{@}powersolutions.com.ar> escribió en el
mensaje de noticias:OH#
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



Respuesta Responder a este mensaje
#3 Francisco J. Lopez
05/12/2007 - 12:39 | Informe spam
Hola Maxi,

Fecha y Hora son de tipo Fecha/Hora.

Saludos,

Francisco


"Maxi Accotto" escribió en el mensaje
news:
Hola, exponga por favor la DDL de la tabla, que tipo de datos es hora? que
tipo de dato es fecha?


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Francisco J. Lopez" <francisco{@}powersolutions.com.ar> escribió en el
mensaje de noticias:OH#
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



Respuesta Responder a este mensaje
#4 Akhenaton
05/12/2007 - 22:49 | Informe spam
Hola, Francisco.

Aunque no se mucho del SQL se me pasa por la cabeza lo siguiente "siempre
desde mi punto de vista"

La grabacion de los datos "Evento" se realiza digamos mediante algun lector,
secretariaEsta parte no es relevante
se ha de comprobar si es un evento de entrada-salida y marcar el evento
apropiado con la hora del sistema

supongamos que se modifica esta parte y se busca si existe un registro para
el empleado sin fecha de salida si es asi grabar la fecha del sistema en el
campo "Salida". en caso contrario es un evento de entrada nuevo. como ves
basicamnete es lo mismo.

tambien creo que la tabla esta mal diseñada. te seria mas comodo si dicha
tabla fuera:
empleado-Char
Entrada-Datetime
Salida-DateTime

Nombre Entrada Salida
Juan 05/11/2007 7:00:00 05/11/2007 12:00:00
Juan 05/11/2007 13:00:00 05/11/2007 18:00:00
Juan 05/11/2007 21:00:00 06/11/2007 1:30:00



Despues todo te sera mas facil:
SELECT SUM(DATEDIFF(n, Entrada, Salida)) AS Minutos FROM Tabla

Esto te devolvera 780 minutos, lo que hagas con ellos es cusa tuya.
podras calcular el tiempo trabajado si le aplicas el correspondiente filtro
al campo de entrada. dias, semanas, meses

PD. considerar la ampliacion de la plantilla y/o ponerle una cama en la
empresa a Juan.

Saludos



"Francisco J. Lopez" <francisco{@}powersolutions.com.ar> escribió en el
mensaje news:
Hola Maxi,

Fecha y Hora son de tipo Fecha/Hora.

Saludos,

Francisco


"Maxi Accotto" escribió en el mensaje
news:
Hola, exponga por favor la DDL de la tabla, que tipo de datos es hora?
que tipo de dato es fecha?


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"Francisco J. Lopez" <francisco{@}powersolutions.com.ar> escribió en el
mensaje de noticias:OH#
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









Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
06/12/2007 - 12:05 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida