我有一张日志表。 我想生成一个花哨的图表,我们可以看到每天的总日志数量。
我想要的输出=
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">
答案 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。
希望它有所帮助。