SQL Server - Agrupar por horas

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 52 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Agrupar por horas

Publicado por Loboligero (4 intervenciones) el 15/05/2012 06:09:56
Tengo una tabla en la que cada cuarto de hora grabo un registro
Agrupo con GROUP BY CONVERT(char(13),FechaHora,120) de forma que los registros de la hora X se agrupa.

Esto está bien, pero lo que quiero es lo siguiente:

hora valor
8:00 2
8:15 4
8:30 5
8:45 7
9:00 6

select max(fechahora), sum(valor) group by hora

de forma que me devuelva

8:00 2
9:00 22

en vez de

8:45 18

que es lo que me devolvería la consulta

select max(fechahora), sum(valor) group by convert(chart(13),fechahora,120)


Por simplificar he escrito sólamente la hora y no la fecha hora total por lo que no tener en cuenta los parámetros 1 y 3 del convert.

Espero que podais ayudarme.

Un saludo y gracias
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Agrupar por horas

Publicado por Isaias (4558 intervenciones) el 15/05/2012 17:27:30
¿Por que no tomas la hora de la fecha con DATEPART(HH, tufecha) y asi agrupas por cada hora?
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
Val: 1
Ha disminuido su posición en 52 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Agrupar por horas

Publicado por LOBOLIGERO (4 intervenciones) el 16/05/2012 16:49:46
Daría lo mismo.

Los registros que se hacen a las y 15 corresponden a la diferencia de la lectura entre las en punto y las y 15, a las y 30 con respecto a las y 15, etc.

De forma que la suma de los valores de hh:15:00 + hh:30:00 + hh:45:00 + siguiente hora en punto, me da el consumo entre las hh y la siguiente hora.

Es decir

8:15 ---- 4
8:30 ---- 5
8:45 ---- 7
9:00 ---- 6


Debería devolver un registro con
9:00 ----- 22

Pero mi sistema coge los valores

8:00 ---- 2
8:15 ---- 4
8:30 ---- 5
8:45 ---- 7

y devuelve

8:45 ----- 18

ya que toma los registros cuya hora es las 8
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Agrupar por horas

Publicado por Isaias (4558 intervenciones) el 17/05/2012 17:38:28
Muestrame tu codigo: las 8:59.59, aun siguen siendo las 8.
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
Val: 1
Ha disminuido su posición en 52 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Agrupar por horas

Publicado por LOBOLIGERO (4 intervenciones) el 17/05/2012 18:33:38
El código no es mas que un select de los registros que se han grabado en una hora concreta, y sea con convert o datepart.

select max(fechahora), sum(valor) group by convert(chart(13),fechahora,120)

y en cada intervalo de hora hay 4 registros el de las 15,30,45 y hora en punto siguiente.

Aunque quede feo, podría restarle un segundo a cada uno de estos registros y de esta forma cuando haga la consulta me saldría lo que quiero. No es mala idea. Gracias.
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Agrupar por horas

Publicado por Isaias (4558 intervenciones) el 21/05/2012 18:22:40
Porque estas utilizando un max(fechahora)
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