如何使用 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 在此查询中按天对结果进行分组?

在 django admin 中按天分组?

SQLAlchemy 在时间戳列中按天分组

如何在Postgres中按年月按最大(日期)组获取行?

如何在 Spring Boot JPA 中按 Postgres 的 json 属性排序?

如何在 Rails 3 的 Postgres 数据库中使用枚举? [关闭]