【问题标题】:Average number of days since a date in postgresql/rails自 postgresql/rails 中某个日期以来的平均天数
【发布时间】:2014-11-27 11:55:34
【问题描述】:

我想计算自“date_from”以来的平均天数(它会有所不同)

User.all.average('? - date_from', Time.now.to_date)

给出错误

undefined method `except' for Thu, 27 Nov 2014:Date

【问题讨论】:

    标签: ruby-on-rails postgresql date average


    【解决方案1】:

    Ruby_on_Rails/ActiveRecord/Calculations

    average的第二个参数是options(一个哈希)

    这些选项可用于通过 :conditions、:order、:group、:have 和 :joins 自定义查询。

    所以你应该生成这样的平均表达式:

    User.average("'#{Time.now.to_date}' - date_from" )
    

    然后 Rails 会生成这样的 SQL:

    SELECT AVG('2014-11-27' - date_from) AS avg_id FROM ...
    

    【讨论】:

      【解决方案2】:

      你可以试试Date::today方法,而不是Time::now

      User.all.average('? - date_from', Date.today)
      

      【讨论】:

        【解决方案3】:

        怎么样:

        #get difference fro all users from Time.now and date_from    
        dates = User.all.pluck(:date_from).map{|date| Time.now - date}
        #sum all elements from array and divide with number of elements
        #to get average 
        days = dates.reduce(0,:+)/dates.length
        #round to 2 decimal places for better display
        days = days.round(2)
        

        【讨论】:

        • 谢谢,这行得通,但不如其他优雅。
        猜你喜欢
        • 2014-11-22
        • 1970-01-01
        • 2022-06-30
        • 1970-01-01
        • 1970-01-01
        • 2023-01-25
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        相关资源
        最近更新 更多