如何使用Postgres在Rails中按天分组记录

时间:2016-03-08 16:45:49

标签: ruby-on-rails postgresql

所以我发现了这些问题:

这个宝石: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} }

然而,正如其他问题所解释的那样,这对于大量记录来说效率不高,我想我应该使用db中的分组,但我不知道如何获得我正在寻找的格式,我尝试过这样的事情,但我没有得到我所期待的:

list.order("date_trunc('day', created_at) DESC).map{ |k, v| { k => v }}

如何从数据库中按天分组记录?

1 个答案:

答案 0 :(得分:4)

因为你最终想要将所有记录加载到内存中,所以你的第一个解决方案(在Ruby中分组)实际上是你能做的最好的。利用SQL分组可以帮助优化,如果你只想,例如,获取每个组中的记录数,甚至是逗号分隔的记录名列表,但是 - 因为你实际上想要记录 - 没有办法获得事实上,你只需要获取所有记录。