MySQL – cómo agrupar hora, compensar por 30 minutos

Me gustaría seleccionar loggings en intervalos de 1 hora, junto con el valor más alto y el más correcto en el intervalo de horas. Puedo hacerlo a la hora (por ej., A la 1:00 a.m., a las 2:00 a.m., a las 3:00 a.m.), pero me gustaría compensarlo por minutos específicos (por ejemplo, 1:30 a.m., 2:30 a.m., 3:30 a.m., o 1:50 a.m., 2:50 a.m., 3:50 a.m.). No quiero agruparme por media hora (por ejemplo, 1:00, 1:30, 2:00, 2:30) Este es el SQL que tengo para intervalos de 1 hora:

select date(date) 'aDate', hour(date) 'aHour', date, bidOpen, max(bidHigh), min(bidLow) from data where date > "2010-10-10" group by aDate, aHour 

Intenté: hora (date) + .5 'ahora': pero no funcionó.

Gracias !!

Una solución es usar una tabla auxiliar que contenga su split de time.

The FromHour y ToHour son solo cadenas

 TABLE timeslice ID | FromHour | ToHour | NextDay ---+----------+--------+------- 1 | 00:30 | 01:30 | 0 2 | 01:30 | 02:30 | 0 <snip> 24 | 23:30 | 00:30 | 1 select date(date) aDate, ID ,date, bidOpen, max(bidHigh),min(bidLow) from data inner join timeslice ON date >= CONCAT(date(Date),' ',FromHour) and date < concat(date(DATEADD(day,NextDay,date),' ',ToHour) group by aDate, ID 

Si almacena su date / hora como marcas de time, puede hacer cosas mathy como GROUP BY FLOOR(MOD((mytimestamp-1800)/3600)) para intervalos de hora comenzando en la media hora.