Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何计数记录并按日期分组,包括记录为0的天数?_Ruby On Rails_Postgresql_Activerecord - Fatal编程技术网

Ruby on rails 如何计数记录并按日期分组,包括记录为0的天数?

Ruby on rails 如何计数记录并按日期分组,包括记录为0的天数?,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,在ActiveRecord中,如何查询事件模型以获得每天创建的大量记录,包括没有创建记录的天数 例如,如果我在本周七天中的四天创建了事件,我希望它返回[2,4,0,1,0,7,3] 到目前为止,我的查询如下: Event.where(name:name).order('date(created_at)')).group('date(created_at)).count.values,但它只返回[2,4,1,7,3],在创建过去X天内创建的事件图表时,该值不起作用 谢谢 试试这个 一旦你得到了团体

在ActiveRecord中,如何查询
事件
模型以获得每天创建的大量记录,包括没有创建记录的天数

例如,如果我在本周七天中的四天创建了事件,我希望它返回
[2,4,0,1,0,7,3]

到目前为止,我的查询如下:
Event.where(name:name).order('date(created_at)')).group('date(created_at)).count.values
,但它只返回
[2,4,1,7,3]
,在创建过去X天内创建的事件图表时,该值不起作用

谢谢

试试这个

一旦你得到了团体计数

event_counts_hash = Event.where(name: name).order('date(created_at)').group('date(created_at)').count

record_count_array = [0] * 7

event_counts_hash.each { |k, v| count_array[k.cwday] = v  }
您应该在count_数组中获取工作日计数

我最近开发了开源(WIP),这是一个客户端微库,用于处理需要表示时间序列数据但序列不完整的情况

例如:

var from = moment('20140101', 'YYYYMMDD');
var to = moment('20140101', 'YYYYMMDD');

var sampleData = [['2014', '01', '01', '100'], ['2014', '03', '01', '300'], ['2014', '04', '01', '100']];

var chartData = new ChartData(sampleData, from, to, 'months');
var data = chartData.data; 

// [1388534400000, 100], [1391212800000, 0], [1393632000000, 300], [1396310400000, 400]

请看一看,我希望您觉得它很有用,并感谢您的反馈。

不要试图自己使用它,只需使用库即可。它为您处理所有EdgeCase,包括不同的每周开始日、无记录开始的范围等

你的具体问题的答案是:

# Unscope is optional, but probably what you want if there is a default_scope.
Event
  .unscoped
  .group_by_day(:created_at)
  .where(name: name)
  .count
但是,如果您想在某个时间范围内使用它,请确保不要将其放在where子句中,因为这将丢失范围开始和结束处的空值

range = 10.days.ago..2.days.ago

Event
  .unscoped
  .group_by_day(:created_at, range: range)
  .where(name: name)
  .count

它将包括整个范围内的值。

这是可行的,但效率低下。有没有办法直接从查询中获取此信息?