2011-08-31 58 views
1

我试图创建一个每天计数数组。我希望计数只能是独特的uid(每天不应该重置哪些uid是“独特的”)。Ruby循环创建一个DISTINCT计数数组

之前,我有:

@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的计数在数据表中的第一次出现。

想法如何finagle?

+0

”独特的uid的整体“是什么意思?你让我感到困惑,你想要什么,你会得到什么。你能举个例子吗? –

+0

好的。假设有两条记录,两条记录都具有相同的“uid”。一条记录是从昨天开始的,第二条是从今天开始的。使用此代码,数组的输出将是[1,1]而不是[1,0](带有2倍循环)。它应该是[1,0],因为'uid'昨天截然不同,但它不是今天。 – Galen

+0

哦,那么问题会更像是“如何获得以前从未见过的每日UID数”?由于你没有考虑前几天出现的uid,所以仅仅在15天之后看是不够的。 –

回答

1

如果你只是想不同的ID的列表,你应该只是删除循环:

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

如果你想要得到的是一个UID先发生的日期,你可以做这样的事情:

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

(未经测试,所以不知道是否可行原样,但是这基本上做到这一点)

不知道这完全回答你的问题,我是一个有点困惑“整体DIST incts“