Cela dépend de la taille de votre plage de dates. Si toutes les dates tombent dans un mois, par exemple, vous pouvez faire ceci :
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)
Vous pouvez également regrouper par année et par mois si vous avez besoin de séparer davantage vos données.