2010-10-28 4 views

Répondre

34

Cela devrait fonctionner (rails 3):

Foo.order(:start_at).group("DATE(start_at)").count 

edit: si vous utilisez PostgreSQL, la requête doit être

Foo.order("DATE(start_at)").group("DATE(start_at)").count 

ou vous « get ll une erreur

("PGError: ERROR: column "foos.start_at" must appear in the GROUP BY clause or be used in an aggregate function") 

Basé sur

Graphing new users by date in a Rails app using Seer

et

http://www.pastbedti.me/2009/11/grouping-a-timestamp-field-by-date-in-ruby-on-rails-postgresql/

8

J'ai créé un petit bijou pour cela. https://github.com/ankane/groupdate

Foo.group_by_day(:created_at).count 

Vous pouvez même spécifier un fuseau horaire.

Foo.group_by_day(:created_at, time_zone: "Pacific Time (US & Canada)").count 
+0

Cela ne fonctionne pas sans accès aux fuseaux horaires mysql sur le serveur. Un défi avec AWS – Abram

+0

Une dépendance assez grande si vous utilisez mysql, était un briseur d'affaire pour moi. – jahrichie

+0

Vous plaisantez? grande dépendance? son 54kb décompressé –

Questions connexes