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的最佳方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: localdate获取几个月前_关于近期
- 下一篇: mysql中如何操作字符串_mysql