Postgres can truncate a date to a certain precision:
SELECT DATE_TRUNC('hour', creation_date) FROM demo
So all you have to do is group and count it:
SELECT DATE_TRUNC('hour', creation_date), COUNT(*)
FROM demo
GROUP BY DATE_TRUNC('hour', creation_date)