SQL Server - Ayuda a optimizar mi Query

 
Vista:
sin imagen de perfil

Ayuda a optimizar mi Query

Publicado por MARKO (11 intervenciones) el 04/07/2013 01:14:08
Saludos Web del programador

Tengo en la tabla cargahoraria los campos Idgen, fecha, hora, generado y cada registro se refiere a una medición realizada cada hora excepto la hora 12 que sera dividida en dos 11:30 y 12 así

1
2
3
4
5
6
7
8
9
10
11
12
13
Idgen          fecha      hora      generado
2          01/01/2007 	6.00	41.00
2	    01/01/2007 	7.00	30.00
2	    01/01/2007 	8.00	31.00
2	    01/01/2007 	9.00	51.00
2	    01/01/2007  10.00	48.00
2	    01/01/2007  11.00	75.00
2	    01/01/2007  11.30	94.00   <---
2	    01/01/2007  12.00	95.00   <---
2	    01/01/2007  13.00	93.00
2	    01/01/2007  14.00	75.00
2	    01/01/2007  15.00	70.00
2	    01/01/2007  16.00	40.00



la cuestión es esta para hacer un monitoreo de la table diremos que la generación de la hora 12 de un día será el promedio entre las generaciones de las 11.30 y 12 así que escribí el siguiente query para saber la generación de todas las horas de UN SOLO día

1
2
3
4
5
6
7
8
9
declare @fecha varchar(10);
declare @unidad varchar(3);
set @fecha = '2007-01-01';
set @unidad = '2';
SELECT idgen, fecha, hora, Generado from Cargahoraria where fecha = @fecha and Idgen = @unidad and hora between '1.00' and '11.00'
UNION
SELECT idgen, fecha, 12 as hora, avg(Generado) from Cargahoraria where fecha = @fecha and Idgen = @unidad and hora between '11.30' and '12.00'
UNION
SELECT idgen, fecha, hora, Generado from Cargahoraria where fecha = @fecha and Idgen = @unidad and hora between '13.00' and '16.00'


el query anterior funciona de maravilla y devuelve el siguiente resultado
1
2
3
4
5
6
7
8
9
10
11
12
Idgen       fecha         hora    generado
2	    01/01/2007 	6.00	41.00
2	    01/01/2007 	7.00	30.00
2	    01/01/2007 	8.00	31.00
2	    01/01/2007 	9.00	51.00
2	    01/01/2007  10.00	48.00
2	    01/01/2007  11.00	75.00
2	    01/01/2007  12.00	94.50   <---
2	    01/01/2007  13.00	93.00
2	    01/01/2007  14.00	75.00
2	    01/01/2007  15.00	70.00
2	    01/01/2007  16.00	40.00


Mi problema reside en que necesito modificar el query para poder hacer el monitoreo en un RANGO DE VARIOS DÍAS no solo un día

agradezco por adelantado su ayuda
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

Ayuda a optimizar mi Query

Publicado por deneg_nhj (4 intervenciones) el 04/07/2013 01:24:38
Prueba con esto:


1
2
3
4
5
6
7
8
9
10
11
12
13
declare @fecha varchar(10);
declare @unidad varchar(3);
set @fecha = '2007-01-01';
set @fecha2 = '2007-01-31';
set @unidad = '2';
SELECT idgen, fecha, hora, Generado from Cargahoraria where fecha between @fecha  and @fecha2
	and Idgen = @unidad and hora between '1.00' and '11.00'
UNION
SELECT idgen, fecha, 12 as hora, avg(Generado) from Cargahoraria where fecha between @fecha  and @fecha2
and Idgen = @unidad and hora between '11.30' and '12.00'
UNION
SELECT idgen, fecha, hora, Generado from Cargahoraria where fecha = between @fecha  and @fecha2
	and Idgen = @unidad and hora between '13.00' and '16.00'


Saludos!
deneg_nhj
www.sgh.com.mx
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
sin imagen de perfil

Ayuda a optimizar mi Query

Publicado por MARKO (11 intervenciones) el 04/07/2013 16:46:42
te agradezco la pronta respuesta deneg_nhj y te aseguro que ya lo habia pensado así pero el único problema con este query es que cuando se dispone a hacer el AVG(generado) para calcular la hora 12 de cada día allí hace el promedio de TODAS LAS HORAS 11.30 y 12.00 de TODOS LOS DIAS.

osea supon que son 5 días entonces toma 5 generados para 11.30 y 5 generados para 12.00 y hace el promedio de los generados de esos 10 datos y coloca ese resultado en todas las horas 12.

ahora lo que yo necesito es meter el rango de fechas y que me liste los resultados pero que para calcular la hora 12 del día 1 solo tome en cuenta el generado de las 11.30 y 12.00 del día 1
para la hora 12 del día 2 solo tome en cuenta el generado de las 11.30 y 12.00 del día 2
para la hora 12 del día 3 solo tome en cuenta el generado de las 11.30 y 12.00 del día 3 y así sucesivamente.

Saludos.
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
sin imagen de perfil

Ayuda a optimizar mi Query

Publicado por MARKO (11 intervenciones) el 02/12/2013 18:42:05
ayuda con esto????
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