按日期和计数行分组日期

时间:2014-12-14 16:37:01

标签: ruby-on-rails postgresql rails-activerecord

我有一张日志表。 我想生成一个花哨的图表,我们可以看到每天的总日志数量。

我想要的输出=

2014-01-05 => 1
2014-01-06 => 6

如果第一个是日期,则总计在该日期内记录。

我目前有这个

Log.order('created_at desc').limit(60).group('created_at')

如果你们帮我的话,我们无法解决这个问题:)

日志示例:

#<Log id: 33533, user_id: 94, category: 19, sub_category: 15147, data: {}, created_at: "2014-12-14 11:40:32", updated_at: "2014-12-14 11:40:32">

2 个答案:

答案 0 :(得分:4)

如果您想按日期分组,只需告诉数据库并让它完成工作:

Log.group('created_at::date').count

::date是用于将时间戳转换为日期的PostgreSQL语法。您还可以使用标准SQL转换语法:

Log.group('cast(created_at as date)').count

如果您需要不同的时区,则应该使用UTC完成所有操作,然后调整GROUP BY子句。

您不一定会以正确的顺序获得Hash,您可以在Ruby中对哈希进行排序,或者如果您需要数据库进行排序,则可以使用子查询。

答案 1 :(得分:0)

试试这个。这将为您提供过去7天的日志记录哈希。这里的关键是日期,值将是该日期的日志记录数组。您可以根据需要获取前几天的记录。

Log.where('created_at >= ?', 7.day.ago).group_by{|m| m.created_at.day }

您可以通过count数组方法获取单个数组的计数。此外,如果您需要密钥的整个日期,请尝试以下。

Log.where('created_at >= ?', 7.day.ago).group_by{|m| m.created_at.to_date.strftime("%Y-%m-%d") }

您也可以使用groupdate gem。

希望它有所帮助。