Ruby循环创建一个DISTINCT计数数组

时间:2011-08-31 14:29:44

标签: ruby-on-rails ruby loops distinct

我正在尝试每天创建一系列计数。我希望计数只是不同的uid(每天都不应该重置uid的“不同”)。

之前,我有:

 @unique_count_array_by_day = []
    15.times { |i| 
      bar = Model.select("DISTINCT(uid)").where(:created_at => (Time.now.beginning_of_day - i.days)..(Time.now.beginning_of_day - (i-1).days)).count()
      @unique_count_array_by_day << bar
    }

这并没有给我明显的uid整体,它给了我一天内独特的uid的数量。所以我拉出代码选择不同的uid的循环:

 @unique_count_array_by_day = []
  foo = Model.select("DISTINCT(uid)")
    15.times { |i| 
      bar = foo.where(:created_at => (Time.now.beginning_of_day - i.days)..(Time.now.beginning_of_day - (i-1).days)).count()
      @unique_count_array_by_day << bar
    }

但是,这仍然会产生每天不同uid的计数,而不是数据表中第一次出现的不同的uid。

有关如何使用此功能的任何想法?

1 个答案:

答案 0 :(得分:1)

如果您只想要一个不同ID的列表,您应该删除循环:

@unique_uids = Model.select("DISTINCT(uid)").all

如果你想获得uid首次出现的日期,你可以这样做:

@unique_uids_with_first_dates = Model.find(:select => 'uid, min(created_at)', :group => 'uid')

(未经测试,因此不确定它是否按原样运行,但这基本上就是这样做的方式)

不确定这是否完全回答了你的问题,我对“整体差异”感到有些困惑