Respuesta: consulta access Resurjo este tema porque quiero hacer una nueva consulta con esto mismo pero en vez de preguntar por un día pregunte entre fechas.
En lo que antes a los del turno de noche les cogía los registros del día siguiente, me gustaría que pregunte entre dos fechas y los del turno de noche todos los registros estuviesen en el mismo día. Un ejemplo:
Empieza el día 21 pero acaba el día 22 (turno de noche), por lo que los registros del día 22 que correspondan a ese turno que comienza el 21 (que terminan a las 7 de la mañana), aparezcan como día 21 (que se me ocurre creando un nuevo campo llamado fecha2 en el que a esa parte le restaría un día).
Yo lo he intentado de la siguiente manera, pero me he dado cuenta de que se come los registros de la noche...
SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.unidades, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, TimeValue([horainicio]) AS Expr1, TimeValue([horafinal]) AS Expr2, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.sabado, PartesDeTrabajo.festivo
FROM operario2 INNER JOIN PartesDeTrabajo ON operario2.CodigoOperario = PartesDeTrabajo.CodigoOperario
WHERE (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.mañana)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.tarde)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 21:0:0#)) AND ((PartesDeTrabajo.noche)=True)) OR (((PartesDeTrabajo.fecha)=DateAdd("d",1,((PartesDe Trabajo.fecha) Between [Fecha inicial] And [Fecha final]))) AND ((TimeValue([horainicio]))<TimeValue(#12/30/1899 7:0:0#)) AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio, TimeValue([horainicio]);
************************************************** **************************** Editado
He modificado la consulta y ahora no me come ningún registro, sólo que me queda añadirle la condición de que me muestre un día menos. He añadido el campo Fecha2 y en la última condición (turno de noche cuya hora de inicio sea inferior a las 7) me gustaría que mostrase el día anterior en el campo fecha2. Esto es lo que tengo hecho:
SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.unidades, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, TimeValue([horainicio]) AS Expr1, TimeValue([horafinal]) AS Expr2, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.sabado, PartesDeTrabajo.festivo, fecha AS Fecha2
FROM operario2 INNER JOIN PartesDeTrabajo ON operario2.CodigoOperario = PartesDeTrabajo.CodigoOperario
WHERE (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.mañana)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.tarde)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 21:0:0#)) AND ((PartesDeTrabajo.noche)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))<TimeValue(#12/30/1899 7:0:0#)) AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio, TimeValue([horainicio]);
Última edición por Koudelka; 25/06/2008 a las 06:32 |