2012-06-13 5 views

ответ

5

Методы класса maximum и minimum будут использовать функции агрегации SQL min() и max(), чтобы эффективно находить экстремальные значения.

span_secs = Foo.maximum(:created_at) - Foo.minimum(:created_at) 
avg_secs = span_secs/(Foo.count - 1) 
avg_days = avg_secs/(24 * 60 * 60) 
+0

+1 Хороший алгоритм - я просто сделала тест бумаги для него. –

+0

Спасибо. Просто хочу, чтобы я был нужен! –

+0

Не уверен, что это вычисляет «среднее число дней между создаваемыми записями» (зависит от того, как ОП определяет его). Рассмотрим [1, 3, 7]. (7 - 1)/3 => 2. Но ((3 - 1) + (7 - 3))/2 => 3 –

0

Если вы используете MySQL

secs = Foo.where("created_at IS NOT NULL").average("UNIX_TIMESTAMP(created_at)").to_i 
DateTime.strptime secs.to_s, "%s" 
Смежные вопросы