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_hour
ythe_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)?