【发布时间】:2015-04-20 16:45:25
【问题描述】:
我一直在尝试获取每天布尔列的累积总和。我尝试了不同的方法使用#sum 并查找了#distinct(通过查看 Stack Overflow 上的其他帖子),但无法以我想要的哈希方式成功实现这两种方法去看看。
目前,这是我的查询:
Device.where(boxed: true).group('date(updated_at)').count
这给了我这个:
{Fri, 17 Apr 2015=>48, Sat, 18 Apr 2015=>44, Sun, 19 Apr 2015=>5, Mon, 20 Apr 2015=>48}
但我希望它看起来像这样:
{Fri, 17 Apr 2015=>48, Sat, 18 Apr 2015=>92, Sun, 19 Apr 2015=>97, Mon, 20 Apr 2015=>145}
我正在使用 Rails 4 和 Postgres。任何帮助将不胜感激。
编辑:
我最终这样做是为了得到累积和,尽管这可能不是最好的方法或根本不是优雅的:
data_all_time = Device.where(boxed: true).group('date(updated_at)').count
data_all_time_keys = data_all_time.keys
data_all_time_values = data_all_time.values
sum = 0
data_all_time_values.map!{|x| sum += x}
all_time_sum_tuple = data_all_time_keys.zip(data_all_time_values)
我最终得到了这样的东西:
[["April 17, 2015", 48], ["April 18, 2015", 92], ["April 19, 2015", 97], ["April 20, 2015", 145]]
在我想出更好的方法之前,这暂时有效。
【问题讨论】:
-
例如,2015 年 4 月 18 日=>44 和 2015 年 4 月 18 日=>92 之间有什么区别?你能告诉我们一些设备表的数据吗
-
@tanorix 不同之处在于,4 月 18 日有 44 台设备被装箱,但到目前为止,将 4 月 17 日和 4 月 18 日的总数相加,总共有 92 台设备被装箱。
-
所以您希望计数是运行总数而不是按日期计数?
-
@muistooshort 没错。
-
很高兴你有答案。我仍然认为它可以完全在 SQL 查询中实现,因为这是我可能需要做的事情,我将继续自己研究它。这是一个很好的问题。
标签: ruby-on-rails postgresql ruby-on-rails-4 activerecord