Consulta Asistencias

La solución a la consulta hecha a traves del grupo SQL Server 2008 – 2019



Create database Asistencias
go
use Asistencias
go
Create table Empleado
(
EmpleadoCodigo nchar(4),
EmpleadoNombre nvarchar(50),
EmpleadoPaterno nvarchar(70),
EmpleadoMaterno nvarchar(70),
EmpladoFechaNacimiento Date,
constraint EmpleadoPK primary key (EmpleadoCodigo)
)
go
insert into Empleado values
(’10’,’Fernando’,’Luque’,’Villacorta’,’16/11/1996′),
(‘1017′,’Carlos’,’Pereda’,’Sánchez’,’12/02/1990′),
(‘1019′,’Aracely’,’Gamarra’,’Llanos’,’23/07/1976′),
(‘1110′,’Pedro’,’Alvarado’,’Soria’,’15/09/1986′),
(‘1158′,’Ana’,’Plasencia’,’Mendez’,’09/10/1979′)
go
Create table Bitacora
(
EmpleadoCodigo nchar(4),
BitacoraFecha DateTime,
BitacoraEstado nchar(1),
constraint BitacoraPK primary key (EmpleadoCodigo,BitacoraFecha)
)
go
Insertar los registros en la tabla Bitacora, se ha incluido un campo Estado donde a todos le he asignado un valor M de marcado.
insert into Bitacora Values
(’10’,’03/04/2019 06:05:53′,’M’),
(’10’,’03/04/2019 21:15:19′,’M’),
(‘1017′,’03/04/2019 07:50:27′,’M’),
(‘1017′,’03/04/2019 18:20:39′,’M’),
(‘1019′,’03/04/2019 07:03:39′,’M’),
(‘1019′,’03/04/2019 18:21:16′,’M’),
(‘1110′,’03/04/2019 08:07:03′,’M’),
(‘1110′,’03/04/2019 18:32:57′,’M’),
(‘1158′,’03/04/2019 06:05:42′,’M’),
(‘1158′,’03/04/2019 18:06:39′,’M’)
go

El select que se ha ejecutado el usuario que hace la consulta
SELECT E.EmpleadoCodigo,
convert(varchar,B.BitacoraFecha,105) as Fecha,
convert(varchar,B.BitacoraFecha,24) as Hora
FROM Bitacora As B
inner join Empleado As E on B.EmpleadoCodigo = E.EmpleadoCodigo
where format(B.BitacoraFecha,’dd/MM/yyyy’)= ’03/04/2019′
order by B.EmpleadoCodigo
go

— Solución, usar un par de subconsultas.

SELECT distinct E.EmpleadoCodigo,
convert(varchar,B.BitacoraFecha,105) as Fecha,
(Select convert(varchar,Min(B1.BitacoraFecha),24)
from Bitacora As B1
where B1.EmpleadoCodigo = E.EmpleadoCodigo ) as ‘Hora de ingreso’,
(Select convert(varchar,Max(B1.BitacoraFecha),24)
from Bitacora As B1
where B1.EmpleadoCodigo = E.EmpleadoCodigo ) as ‘Hora de Salida’
FROM Empleado As E
inner join Bitacora As B on E.EmpleadoCodigo = B.EmpleadoCodigo
where format(B.BitacoraFecha,’dd/MM/yyyy’)= ’03/04/2019′
go



Sugerencia
Incluir en la tabla Bitacora un campo nchar(1) donde especifique si se trata de ingreso o de salida.