如何使用 Postgres 在 Rails 中按天对记录进行分组
Posted
技术标签:
【中文标题】如何使用 Postgres 在 Rails 中按天对记录进行分组【英文标题】:How to group records by day in Rails using Postgres 【发布时间】:2016-03-08 16:45:49 【问题描述】:所以我发现了这些问题:
How to group and count by day in Rails in Postgres? Grouping by week/month/etc & ActiveRecord? How do I group by day instead of date?还有这个宝石:https://github.com/ankane/groupdate
我希望按天对记录进行分组,格式如下:
[
"2016-03-16" => [Record1, Record2, Record3] ,
"2016-03-17" => [Record1, Record2] ,
"2016-03-18" => [Obj1, Obj2]
]
我已经能够使用此代码获得这种格式:
def group_by_criteria
created_at.to_date.to_s
end
list.group_by(&:group_by_criteria).map |k,v| k => v
但是,正如其他问题中所解释的,这对于大量记录来说效率不高,我想我应该使用数据库中的分组,但我不确定如何获得我正在寻找的格式,我尝试过这样的事情,但我没有得到我期望的结果:
list.order("date_trunc('day', created_at) DESC).map |k, v| k => v
我怎样才能像这样从数据库中按天对记录进行分组?
【问题讨论】:
我能看到的唯一其他方法是每天查询一次,这并不可怕,但比在 ruby 中更简单/高效。但是,它可能会对您的数据库征税。但是你可以添加缓存,这会有所帮助。这么多变量,这真的取决于你的用例。 【参考方案1】:因为您最终确实希望将所有记录加载到内存中,所以您的第一个解决方案(在 Ruby 中进行分组)实际上是您能做的最好的。如果您只想获取每个组中的记录计数,或者甚至是逗号分隔的记录名称列表,则利用 SQL 分组可以帮助优化,但是 - 因为您实际上想要记录 - 没有办法得到围绕这一事实,您只需获取所有记录。
【讨论】:
以上是关于如何使用 Postgres 在 Rails 中按天对记录进行分组的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL Server 在此查询中按天对结果进行分组?