记录编号按时间的顺序

时间:2018-07-19 12:43:10

标签: ruby-on-rails postgresql ruby-on-rails-4 group-by aggregate

假设我在不同的日期创建了三个用户。现在,我想要一个用户进度图。所以我想得到类似的东西:

{
  Thu, 02 Nov 2017=>1,
  Sat, 04 Feb 2017=>2,
  Wed, 21 Mar 2018=>3
}

这与按created_at::date进行分组非常相似,但是我想拥有在此日期之前创建的所有记录的数量,而不是确切地在该日期创建的项目数量。

如何使用group_by和Postgresql中的聚合函数来实现此目的?对于Ruby on Rails项目,我需要它,但是我希望使用简单的香草SQL,没有地图和复杂的查询。

1 个答案:

答案 0 :(得分:0)

我不是Rails专家,我的解决方案需要建立如下这样的大关系:

@u = User.all

然后找到最小的创建日期:

@start = @u.minimum("created_at")

然后,您可以计算从创建到现在的天数:

@days = ((Time.now - @start)/1.day).to_i

然后您可以每天计算已经创建的用户数:

@days.each do |day|
puts "day "+day.to_s
puts @u.where("created_at < ?", @start+day.day).count
end

不过,可能是一些更简单的SQL解决方案。 (另外,通过选择不超过服务器内存的日期范围,您可能只占用一部分用户)