2010-08-16 4 views
3

Je souhaite regrouper mes données par heure/jour, voire même par quart d'heure. Puis-je le faire directement dans ActiveRecord ou dois-je saisir toutes les données et effectuer l'agrégation manuellement?Est-il possible de grouper par heure/minute/quart d'heure directement dans ActiveRecord/Rails?

Table "Checkin": 
    Time NumBikes ChangeBikes 
    09:00 5   5 
    09:05 6   1 
    09:10 10  4 
    10:00 6   4 
    10:05 8   2 
    10:10 16  8 

Looking to get something like: 
    Time Sum(ChangeBikes) 
    09:00 10 
    10:00 14 

Merci d'avance, Chris.

+0

Yay - ce sans réponse, question à peine vu, m'a fait l'amarante badge :) –

Répondre

0

La solution que je suis allé pour était de créer des colonnes supplémentaires sur la table pour les périodes que je suis après. Pour l'exemple ci-dessus, j'ajouterais une colonne Time_Hour avec le temps arrondi à l'heure appropriée. Je pourrais alors faire des regroupements/analyses sur cette colonne pour obtenir des statistiques à l'heure.

2

Dans le cas où vous n'avez pas besoin du quart d'heure ou comme alternative à cela (avec un peu de travail) (et Chris peut avoir déjà découvert cela depuis longtemps) vous pouvez essayer la réponse détaillée here.

L'essentiel est que vous pouvez regrouper par un élément de temps individuel - par ex. group(hour(date_time_field) - ou par un format de date:

CheckIn.group("date_format(created_at, '%Y%m%d %H/%M')").count 

Si vous voulez ajouter au quart d'heure, vous pouvez essayer this puis ajouter le formatage

+0

Merci - sonne comme une bonne option –