欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

mysql avg 时间_MySQL或Rails在特定日期范围内每天获得AVG的最佳方式

发布时间:2025/3/21 数据库 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 mysql avg 时间_MySQL或Rails在特定日期范围内每天获得AVG的最佳方式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

是否有原因(除了已经提到的日期之外)为什么不使用ActiveRecord中的内置组功能?您似乎关注“后期处理”,我认为这并不值得担心.

你在Rails中,所以你应该首先寻找一个Rails解决方案[1].我的第一个想法是做类似的事情

Product.average(:sales_price,:group => "DATE(created_at)",:conditions => ["merchant_id=?",1])

哪个ActiveRecord变成了你描述的sql.假设Merchant和Product之间有一个声明的has_many关联,那么你可能会更好地使用它,所以类似于:

ave_prices = Merchant.find(1).products.average(:sales_price,:group => "DATE(created_at)")

(我希望您对模型的描述为“products_sold”是某种转录错误,顺便说一下 – 如果没有,您的课程命名就会有点消息!)

毕竟,你回到了开始的地方,但是你以更传统的Rails方式到达那里(Rails真的很重视惯例!).现在我们需要填补空白.

我假设你知道你的日期范围,让我们说它被定义为从from_date到to_date的所有日期.

date_aves = (from_date..to_date).map{|dt| [dt,0]}

这会将完整的日期列表构建为数组.我们不需要得到平均值的日期:

ave_price_dates = ave_prices.collect{|ave_price| ave_price[0]} # build an array of dates

date_aves.delete_if { |dt| ave_price.dates.index(dt[0]) } # remove zero entries for dates retrieved from DB

date_aves.concat(ave_prices) # add the query results

date_aves.sort_by{|ave| ave[0] } # sort by date

这一批看起来有点混乱:我认为它可能更温和,更清洁.我正在研究构建一个Hash或Struct,而不是留在数组中.

[1]我并不是说不使用sql – 在ActiveRecord无法生成最有效查询的情况下会发生这种情况,并且您会依赖于find_by_sql.这很好,它应该是这样的,但我认为你应该尝试使用它作为最后的手段.

总结

以上是生活随笔为你收集整理的mysql avg 时间_MySQL或Rails在特定日期范围内每天获得AVG的最佳方式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。