我想计算两个日期之间的平均时间(以天计)。我想知道每个用户加入后的天数,并获得平均值。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