psql
with minutes as (
select current_timestamp + (generate_series * interval '1 minute') as "time" from generate_series(1,60)
) select time, date_trunc('hour',time)
, date_bin('1 hour', time, timestamp '0001-01-01') "00 *"
, date_bin('1 hour', time, timestamp '0001-01-01 00:12:00') "12 *"
, date_bin('5 minutes',time, timestamp '0001-01-01 00:00:00') "*/5 *"
from minutes order by time desc;