Рубиновый цикл для создания массива счетчиков DISTINCT - PullRequest
1 голос
/ 31 августа 2011

Я пытаюсь создать массив подсчетов в день. Я хочу, чтобы значения были только для отдельных идентификаторов пользователей (то, что идентификаторы "различны", не следует сбрасывать каждый день).

Раньше у меня было:

 @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 из цикла:

 @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
    }

Тем не менее, это все равно производит количество различных идентификаторов пользователей в день вместо отдельных идентификаторов при их первом появлении в таблице данных.

Есть какие-нибудь мысли о том, как это найти?

1 Ответ

1 голос
/ 31 августа 2011

Если вы просто хотите получить список уникальных идентификаторов, просто удалите цикл:

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

Если вы хотите получить дату первого появления uid, вы можете сделать что-то вроде этого:

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

(не проверено, поэтому не уверен, что это работает как есть, но это в основном способ сделать это)

Не уверен, что это полностью отвечает на ваш вопрос, я был немного смущен "общими отличиями"

...