Melhor maneira de contar registros por intervalos de tempo arbitrários em Rails + Postgres

Meu aplicativo tem umEvents tabela com eventos com data e hora.

Preciso informar a contagem de eventos durante cada um dos mais recentesN intervalos de tempo. Para diferentes relatórios, o intervalo pode ser "a cada semana" ou "cada dia" ou "cada hora" ou "a cada intervalo de 15 minutos".

Por exemplo, um usuário pode exibir quantos pedidos eles receberam por semana, dia, hora ou quarto de hora.

1) Minha preferência é fazer dinamicamente uma única consulta SQL (estou usando o Postgres) que agrupa por um intervalo de tempo arbitrário. Existe uma maneira de fazer isso?

2) Uma maneira de força bruta fácil, porém feia, é fazer uma única consulta para todos os registros dentro do período de tempo de início / fim classificado por timestamp e, em seguida, ter um método manualmente construído por qualquer intervalo.

3) Outra abordagem seria adicionar campos separados à tabela de eventos para cada intervalo e armazenar estaticamente umthe_week the_day, the_hourethe_quarter_hour campo, então eu tomo o 'hit' no momento em que o registro é criado (uma vez), em vez de toda vez que eu relatar nesse campo.

Qual é a melhor prática aqui, dado que eu poderia modificar o modelo e pré-armazenar dados de intervalo, se necessário (embora com a despesa modesta de dobrar a largura da tabela)?