Ver Mensaje Individual
  #16 (permalink)  
Antiguo 22/07/2009, 13:13
chelodelsur
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años, 7 meses
Puntos: 2
Respuesta: Agrupar datetime por medias horas?? se puede???

Huesos52:

Mira esta es la consulta nueva, (por decirlo, ya que es la misma anterior repetida dos veces, con algunos ajustes)

Código MySql:
Ver original
  1. SELECT año,mes,dia,fecha,mediahora,SUM(Recibido)
  2. (
  3.       YEAR(k.fecha_date2) AS año,    
  4.       UPPER(CASE WHEN MONTH(k.fecha_date2) = 1 THEN "enero"  
  5.                  WHEN MONTH(k.fecha_date2) = 2 THEN "febrero"
  6.                  WHEN MONTH(k.fecha_date2) = 3 THEN "marzo"  
  7.                  WHEN MONTH(k.fecha_date2) = 4 THEN "abril"  
  8.                  WHEN MONTH(k.fecha_date2) = 5 THEN "mayo"  
  9.                  WHEN MONTH(k.fecha_date2) = 6 THEN "junio"  
  10.                  WHEN MONTH(k.fecha_date2) = 7 THEN "julio"  
  11.                  WHEN MONTH(k.fecha_date2) = 8 THEN "agosto"  
  12.                  WHEN MONTH(k.fecha_date2) = 9 THEN "septiembre"  
  13.                  WHEN MONTH(k.fecha_date2) = 10 THEN "octubre"  
  14.                  WHEN MONTH(k.fecha_date2) = 11 THEN "noviembre"  
  15.                  WHEN MONTH(k.fecha_date2) = 12 THEN "diciembre"  
  16.                                ELSE "NUUL_MES" END)  AS MES ,    
  17.       UPPER(CASE WHEN WEEKDAY(k.fecha_date2) = 0 THEN "Lunes"
  18.                  WHEN WEEKDAY(k.fecha_date2) = 1 THEN "Martes"
  19.                  WHEN WEEKDAY(k.fecha_date2) = 2 THEN "Miercoles"
  20.                  WHEN WEEKDAY(k.fecha_date2) = 3 THEN "Jueves"
  21.                  WHEN WEEKDAY(k.fecha_date2) = 4 THEN "Viernes"
  22.                  WHEN WEEKDAY(k.fecha_date2) = 5 THEN "Sabado"
  23.                  WHEN WEEKDAY(k.fecha_date2) = 6 THEN "Domingo"
  24.                                 ELSE "NUUL_DIA" END) AS `DIA`,
  25.       DATE_FORMAT(k.fecha_date2,'%Y-%m-%d') AS fecha,
  26.       TIME_FORMAT(k.fecha_date2,'%H:%i:%s') AS Horareal,
  27.        j.mediahora AS mediahora,  
  28.             0 AS Recibido
  29. FROM rrserver.horas j,
  30. rrserver.reg_15_minutos k
  31. WHERE k.fecha_date2 BETWEEN '2009-03-02 00:00:00' AND '2009-07-19 23:59'
  32.  
  33.  
  34.       YEAR(t.fecha_date2) AS año,    
  35.       UPPER(CASE WHEN MONTH(t.fecha_date2) = 1 THEN "enero"  
  36.                  WHEN MONTH(t.fecha_date2) = 2 THEN "febrero"
  37.                  WHEN MONTH(t.fecha_date2) = 3 THEN "marzo"  
  38.                  WHEN MONTH(t.fecha_date2) = 4 THEN "abril"  
  39.                  WHEN MONTH(t.fecha_date2) = 5 THEN "mayo"  
  40.                  WHEN MONTH(t.fecha_date2) = 6 THEN "junio"  
  41.                  WHEN MONTH(t.fecha_date2) = 7 THEN "julio"  
  42.                  WHEN MONTH(t.fecha_date2) = 8 THEN "agosto"  
  43.                  WHEN MONTH(t.fecha_date2) = 9 THEN "septiembre"  
  44.                  WHEN MONTH(t.fecha_date2) = 10 THEN "octubre"  
  45.                  WHEN MONTH(t.fecha_date2) = 11 THEN "noviembre"  
  46.                  WHEN MONTH(t.fecha_date2) = 12 THEN "diciembre"  
  47.                                ELSE "NUUL_MES" END)  AS MES ,    
  48.       UPPER(CASE WHEN WEEKDAY(t.fecha_date2) = 0 THEN "Lunes"
  49.                  WHEN WEEKDAY(t.fecha_date2) = 1 THEN "Martes"
  50.                  WHEN WEEKDAY(t.fecha_date2) = 2 THEN "Miercoles"
  51.                  WHEN WEEKDAY(t.fecha_date2) = 3 THEN "Jueves"
  52.                  WHEN WEEKDAY(t.fecha_date2) = 4 THEN "Viernes"
  53.                  WHEN WEEKDAY(t.fecha_date2) = 5 THEN "Sabado"
  54.                  WHEN WEEKDAY(t.fecha_date2) = 6 THEN "Domingo"
  55.                                 ELSE "NUUL_DIA" END) AS `DIA`,
  56.       DATE_FORMAT(t.fecha_date2,'%Y-%m-%d') AS fecha,
  57.       TIME_FORMAT(t.fecha_date2,'%H:%i:%s') AS Horareal,
  58.        h.mediahora AS mediahora,  
  59.             (IF(t.recibido= '',0,t.recibido)) AS Recibido
  60. FROM rrserver.reg_15_minutos t
  61. LEFT JOIN rrserver.horas h
  62. ON CONCAT(IF(HOUR(t.fecha_date2)<10,CONCAT('0',HOUR(t.fecha_date2)) , HOUR(t.fecha_date2)),':', IF(MINUTE(t.fecha_date2)<29,'00','30'),':','00') =  h.mediahora
  63. WHERE t.fecha_date2 BETWEEN '2009-03-02 00:00:00' AND '2009-07-19 23:59'
  64. ) a
  65. GROUP BY año,mes,dia,fecha,mediahora;

Hago una consulta que en el From tiene dos consultas unidas por UNION ALL, La primera me trae todas las horas de la tabla horas, luego con la segunda consulta sumo los registros de recibidos en la tabla reg_15_min. Con UNION ALL junto las consultas y me entrega los datos como los necesito.
Ventajas: hace el trabajo,
Desventajas: es lenta (no em complica mucho eso), es suceptible a errores de ingreso al ser tan largo el codigo, no me deja ordenar en el "sentido" de fecha de los campos del select principal, ya que los ordena en base a texto, ya que son los alias de las consultas anidadas. No se ve muy elegante, jajjaj ...
Pero funciona, por lo menos hasta el momento me parece que hace todo lo que necesito.

Código:
+------+-------+-------+------------+-----------+---------------+
| año | mes   | dia   | fecha      | mediahora | SUM(Recibido) |
+------+-------+-------+------------+-----------+---------------+
| 2009 | MARZO | LUNES | 2009-03-02 | 00:00:00  |             2 |
| 2009 | MARZO | LUNES | 2009-03-02 | 00:30:00  |             1 |
| 2009 | MARZO | LUNES | 2009-03-02 | 01:00:00  |             3 |
| 2009 | MARZO | LUNES | 2009-03-02 | 01:30:00  |             1 |
| 2009 | MARZO | LUNES | 2009-03-02 | 02:00:00  |             1 |
| 2009 | MARZO | LUNES | 2009-03-02 | 02:30:00  |             2 |
| 2009 | MARZO | LUNES | 2009-03-02 | 03:00:00  |             2 |
| 2009 | MARZO | LUNES | 2009-03-02 | 03:30:00  |             0 |
| 2009 | MARZO | LUNES | 2009-03-02 | 04:00:00  |             2 |
| 2009 | MARZO | LUNES | 2009-03-02 | 04:30:00  |             0 |
| 2009 | MARZO | LUNES | 2009-03-02 | 05:00:00  |             0 |
| 2009 | MARZO | LUNES | 2009-03-02 | 05:30:00  |             0 |
| 2009 | MARZO | LUNES | 2009-03-02 | 06:00:00  |             3 |
| 2009 | MARZO | LUNES | 2009-03-02 | 06:30:00  |             7 |
| 2009 | MARZO | LUNES | 2009-03-02 | 07:00:00  |            24 |
| 2009 | MARZO | LUNES | 2009-03-02 | 07:30:00  |            62 |
| 2009 | MARZO | LUNES | 2009-03-02 | 08:00:00  |            49 |
| 2009 | MARZO | LUNES | 2009-03-02 | 08:30:00  |             0 |
| 2009 | MARZO | LUNES | 2009-03-02 | 09:00:00  |             0 |

Una vez más muchas gracias, y por supuesto si tienes sugerencias para mejorarla, por favor no dudes en decirlo.

Saludos