Depende de qué tan grande sea su rango de fechas. Si todas las fechas caen dentro de un mes, por ejemplo, podría hacer esto:
select day(timestamp) as Day, hour(timestamp) as Hour, count(*) as Count
from MyTable
where timestamp between :date1 and :date2
group by day(timestamp), hour(timestamp)
También puede agrupar por año y mes si necesita separar aún más sus datos.