La mejor manera de contar registros por intervalos de tiempo arbitrarios en Rails + Postgres

Mi aplicación tiene unEvents Mesa con eventos con sello de tiempo.

Necesito informar el recuento de eventos durante cada uno de los más recientes.N intervalos de tiempo. Para diferentes informes, el intervalo puede ser "cada semana" o "cada día" o "cada hora" o "cada intervalo de 15 minutos".

Por ejemplo, un usuario puede mostrar cuántos pedidos recibió cada semana, día u hora o cuarto de hora.

1) Mi preferencia es realizar dinámicamente una sola consulta SQL (estoy usando Postgres) que se agrupa por un intervalo de tiempo arbitrario. ¿Hay una manera de hacerlo?

2) Una forma sencilla pero fea de fuerza bruta es hacer una sola consulta para todos los registros dentro del período de tiempo de inicio / finalización ordenados por marca de tiempo, y luego hacer que un método construya un conteo manualmente en cualquier intervalo.

3) Otro enfoque sería agregar campos separados a la tabla de eventos para cada intervalo y almacenar de forma estáticathe_week the_day, the_hourythe_quarter_hour campo, por lo que tomo el 'hit' en el momento en que se crea el registro (una vez) en lugar de cada vez que informo sobre ese campo.

¿Cuál es la mejor práctica aquí, dado que podría modificar el modelo y los datos de intervalo de almacenamiento previo si fuera necesario (aunque a expensas de duplicar el ancho de la tabla)?

Respuestas a la pregunta(1)

Su respuesta a la pregunta