假设我在不同的日期创建了三个用户。现在,我想要一个用户进度图。所以我想得到类似的东西:
{
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,没有地图和复杂的查询。
答案 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解决方案。 (另外,通过选择不超过服务器内存的日期范围,您可能只占用一部分用户)