我想計算兩個日期之間的平均時間(以天計)。我想知道每個用戶加入後的天數,並獲得平均值。2日期之間的平均時間ruby
(Date.today - User.first.created_at.to_date).to_i
適用於特定用戶。現在我想遍歷所有用戶並檢索平均值。如何完成這樣的事情?
我想計算兩個日期之間的平均時間(以天計)。我想知道每個用戶加入後的天數,並獲得平均值。2日期之間的平均時間ruby
(Date.today - User.first.created_at.to_date).to_i
適用於特定用戶。現在我想遍歷所有用戶並檢索平均值。如何完成這樣的事情?
或者你可以試試這個:如果你擴展了Ruby的Array
像這樣
User.all.sum { |user| (Time.now - user.created_at)/1.day }.to_i/User.count
BTW:
class Array
def avg(&block)
sum(&block).to_i/count
end
end
,你可以做一個很好的和短版本:
User.all.avg { |user| (Time.now - user.created_at)/1.day }
但是,這將迭代所有用戶,並且如果有大量用戶將是一個大熱門。 – rubish
是的,這是正確的,但在SQL中編寫它非常依賴於數據庫。我認爲這些問題必須獨立解決,每個應用程序都需要它自己的解決方案。有時通過Ruby迭代Array'並不是什麼壞事,有時它真的會讓屁股感到痛苦。 –
或者你可以寫一個查詢直接從數據庫中檢索平均值。 – rubish
在這種情況下查詢的樣子是什麼? – Gaelle
如果您使用的是MySQL,則可以在SELECT SO(DATEDIFF(NOW(),created_at))/ COUNT(id)FROM users'的行上進行操作。 http://dev.mysql.com/doc/refman/5.5/zh-TW/date-and-time-functions.html#function_datediff,http://developer.postgresql.org/pgdocs/postgres/functions-datetime.html – rubish