Principales respuestas
seleccionar id excepto los que están fuera de un rango de hora

Pregunta
-
hola a todo de nuevo.
mi pregunto es seleccionar ciertos id excepto los que su hora de entrada pasen de los siguientes rangos
07:01-7:20, 08:01-08:20, 09:01-09:20, 10:01- 10:20
para mostrar estos id con esta referencia de horas realizo el siguiente query
select nomina,nombre,fecha,hora from filtro where ((hora>= '07:01' and hora<='07:20') or (hora>='08:01' and hora<='08:20') or (hora>='09:01' and hora<='09:20') or (hora>='10:01' and hora<='10:20')) and fecha between @inicio and @fin order by fecha
como puedo solo mostrar una sola vez el id que no tenga una llegada tarde
Respuestas
-
Que tal, prueba este query y nos comentas como vas.
declare @inicio date ='20150601'; declare @fin date ='20150604'; declare @filtro table( [ID] int primary key, [IDPersona] int, --este debe ser el FK con persona [nombre] [varchar](50) NULL, [fecha] [date] NULL, [hora] [char](5) NULL ); insert into @filtro select 1,1,'luis martinez','20150601','08:15' union all select 2,1,'luis martinez','20150602','08:15' union all select 3,1,'luis martinez','20150603','07:58' union all select 4,1,'luis martinez','20150604','07:58' union all select 5,2,'luis temprano','20150604','08:15' select f1.IDPersona, f1.nombre,f1.fecha,f1.hora into #tempo from @filtro f1 where --tarde-- not ((f1.hora>= '07:01' and f1.hora<='07:20') or (f1.hora>='08:01' and f1.hora<='08:20') or (f1.hora>='09:01' and f1.hora<='09:20') or (f1.hora>='10:01' and f1.hora<='10:20')) and f1.fecha between @inicio and @fin order by f1.fecha select * from #tempo --temprano select f1.ID, f1.IDPersona, f1.nombre,f1.fecha,f1.hora from @filtro f1 where --temprano-- ((f1.hora>= '07:01' and f1.hora<='07:20') or (f1.hora>='08:01' and f1.hora<='08:20') or (f1.hora>='09:01' and f1.hora<='09:20') or (f1.hora>='10:01' and f1.hora<='10:20')) and f1.fecha between @inicio and @fin and f1.IDPersona not in(select distinct tt.IDPersona from #tempo tt) order by f1.fecha drop table #tempo
Saludos,
Ayacucho - Perú
Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.
http://litigiouslobo.blogspot.com/
El Blog de Herbert Mendoza- Marcado como respuesta Karen MalagónModerator martes, 16 de junio de 2015 17:52
Todas las respuestas
-
Que tal, pero tu query ¿no funciona?, si deseas mostrar el resultado de un ID específico agregalo en tu claúsula WHERE,
Ayudaría si brindas un poco más de ejemplo.
select nomina,nombre,fecha,hora from filtro where ((hora>= '07:01' and hora<='07:20') or (hora>='08:01' and hora<='08:20') or (hora>='09:01' and hora<='09:20') or (hora>='10:01' and hora<='10:20')) and fecha between @inicio and @fin and ID = @ID order by fecha
Saludos,
Ayacucho - Perú
Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.
http://litigiouslobo.blogspot.com/
El Blog de Herbert Mendoza -
-
Hola,
Podrías negar la primera condición:
select nomina,nombre,fecha,hora from filtro where not ((hora>= '07:01' and hora<='07:20') or (hora>='08:01' and hora<='08:20') or (hora>='09:01' and hora<='09:20') or (hora>='10:01' and hora<='10:20')) and fecha between @inicio and @fin order by fecha
Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.
Willams Morales
Arequipa - PERÚ- Propuesto como respuesta HunchbackMVP jueves, 11 de junio de 2015 17:39
-
Claro, niega la primera sentencia, un poco de álgebra booleana.
Saludos,
Ayacucho - Perú
Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.
http://litigiouslobo.blogspot.com/
El Blog de Herbert Mendoza -
Willams Morales el query si realiza la condición pero me sigue personal que tiene retardos...
por ejemplo:
luis martines los primeros dias de la semana llego a las 8:15 pero los últimos dos llego a las 07:58, al realizar el query me arroja a luis martines que llego temprano por los dos últimos días.
la nueva pregunta seria ¿Como puedo seleccionar al personal que ningún día de la semana allá llegado tarde?
perdon por las molestias
-
Willams Morales el query si realiza la condición pero me sigue personal que tiene retardos...
por ejemplo:
luis martines los primeros dias de la semana llego a las 8:15 pero los últimos dos llego a las 07:58, al realizar el query me arroja a luis martines que llego temprano por los dos últimos días.
la nueva pregunta seria ¿Como puedo seleccionar al personal que ningún día de la semana allá llegado tarde?
perdon por las molestias
Si la sugerencia dada por Williams a tu pregunta original te ayudo a resolver ese problema entonces marcala como respuesta.
En cuanto a tu segunda pregunta, es preferible que habras un nuevo hilo para que quines participan en este foro tengan mayor probabilidad de encontrar preguntas similares.
AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas -
Que tal, prueba este query y nos comentas como vas.
declare @inicio date ='20150601'; declare @fin date ='20150604'; declare @filtro table( [ID] int primary key, [IDPersona] int, --este debe ser el FK con persona [nombre] [varchar](50) NULL, [fecha] [date] NULL, [hora] [char](5) NULL ); insert into @filtro select 1,1,'luis martinez','20150601','08:15' union all select 2,1,'luis martinez','20150602','08:15' union all select 3,1,'luis martinez','20150603','07:58' union all select 4,1,'luis martinez','20150604','07:58' union all select 5,2,'luis temprano','20150604','08:15' select f1.IDPersona, f1.nombre,f1.fecha,f1.hora into #tempo from @filtro f1 where --tarde-- not ((f1.hora>= '07:01' and f1.hora<='07:20') or (f1.hora>='08:01' and f1.hora<='08:20') or (f1.hora>='09:01' and f1.hora<='09:20') or (f1.hora>='10:01' and f1.hora<='10:20')) and f1.fecha between @inicio and @fin order by f1.fecha select * from #tempo --temprano select f1.ID, f1.IDPersona, f1.nombre,f1.fecha,f1.hora from @filtro f1 where --temprano-- ((f1.hora>= '07:01' and f1.hora<='07:20') or (f1.hora>='08:01' and f1.hora<='08:20') or (f1.hora>='09:01' and f1.hora<='09:20') or (f1.hora>='10:01' and f1.hora<='10:20')) and f1.fecha between @inicio and @fin and f1.IDPersona not in(select distinct tt.IDPersona from #tempo tt) order by f1.fecha drop table #tempo
Saludos,
Ayacucho - Perú
Recuerda si mi solución atiende tu consulta por favor márcala como útil y como respuesta.
http://litigiouslobo.blogspot.com/
El Blog de Herbert Mendoza- Marcado como respuesta Karen MalagónModerator martes, 16 de junio de 2015 17:52