SQL - Problema con sql de fechas para ingreso y salida de personal

 
Vista:
sin imagen de perfil

Problema con sql de fechas para ingreso y salida de personal

Publicado por Alexis A (1 intervención) el 10/06/2014 20:28:34
Tengo el siguiente problema con una consulta en Access tengo
una tabla que registra las entradas y las salidas con los siguientes campos
CodEmpl : Codigo del empleado
RegEntrSali: registra fecha y hora de salida
Estado: E, cuando es entrada y S cuando es salida

coloco la siguiente consulta pero me sale siempre la primera entrada desde la primera fecha que marco y la ultima salida que ha marcado todo el tiempo que entro, no lo separa por dias

SELECT REGISTRO_TIMBRE.CodEmpl,
REGISTRO_TIMBRE.Fecha,
(select min(RegEntrSali) from REGISTRO_TIMBRE where Estado = "E" and CodEmpl = REGISTRO_TIMBRE.CodEmpl and fecha = REGISTRO_TIMBRE.Fecha ) AS Entrada,
(select max(RegEntrSali) from REGISTRO_TIMBRE where Estado = "S" and CodEmpl = REGISTRO_TIMBRE.CodEmpl) AS Salida
FROM REGISTRO_TIMBRE
GROUP BY REGISTRO_TIMBRE.Fecha, REGISTRO_TIMBRE.CodEmpl
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con sql de fechas para ingreso y salida de personal

Publicado por leonardo_josue (1173 intervenciones) el 11/06/2014 19:38:49
Hola Alexis A:

Aquí hay varias consideraciones a tomar en cuenta con respecto a tu consulta.

1. En tu query mencionas un campo llamado FECHA, pero en la descripción de la tabla no lo mencionas... por lo tanto, ¿estamos hablando de un campo distinto?... por un lado dices que:

1
RegEntrSali: registra fecha y hora de salida

pero tengo la duda de si en este campo almacenas sólo la hora o también la fecha de registro de la entrada/salida.

2. En tus subconsultas estás haciendo un filtro para la fecha, pero tienes algo como esto:

1
2
3
4
from REGISTRO_TIMBRE
where Estado = "E" and
CodEmpl = REGISTRO_TIMBRE.CodEmpl
and fecha = REGISTRO_TIMBRE.Fecha

es decir, en el FROM tienes la tabla REGISTRO_TIMBRE, pero no utilizas ningún ALIAS, por lo tanto, al poner el nombre de la tabla ESTÁS HACIENDO REFERENCIA A LA MISMA TABLA DEL FROM, no a la tabla "externa", en otras palabras es como si hicieras esto:

1
2
3
from REGISTRO_TIMBRE where
Estado = "E" and
CodEmpl = CodEmpl and fecha = Fecha

Si quieres incluir la tabla "externa" como parte de los filtros DEBES ASIGNAR UN ALIAS DISTINTO EN CADA FROM:

1
2
3
4
5
6
7
8
9
10
SELECT ....
.....
from REGISTRO_TIMBRE as TABLA_INTERNA
where TABLA_INTERNA.Estado = "E" and
TABLA_INTERNA.CodEmpl = TABLA_EXTERNA.CodEmpl and
TABLA_INTERNA.fecha = TABLA_EXTERNA.Fecha....
)
...
FROM REGISTRO_TIMBRE as TABLA_EXTERNA
GROUP BY TABLA_EXTERNA.Fecha, TABLA_EXTERNA.CodEmpl

3. En la subconsulta para obtener la fecha MAXIMA NO ESTÁS HACIENDO EL FILTRO DE FECHA, sólo el de tipo de registro y el del código del empleado.

4. Mucho ojo, si en tu campo FECHA almacenas también la hora, al momento de hacer el GROUP BY te puede arrojar resultados incorrectos.

Haz la prueba haciendo el uso de alias distintos para tus tablas, si continuas con problemas postea algunos datos de ejemplo de tu tabla completa, así podemos hacer algunas pruebas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar