mysql avg 时间_MySQL或Rails在特定日期范围内每天获得AVG的最佳方式
是否有原因(除了已經(jīng)提到的日期之外)為什么不使用ActiveRecord中的內(nèi)置組功能?您似乎關(guān)注“后期處理”,我認(rèn)為這并不值得擔(dān)心.
你在Rails中,所以你應(yīng)該首先尋找一個(gè)Rails解決方案[1].我的第一個(gè)想法是做類似的事情
Product.average(:sales_price,:group => "DATE(created_at)",:conditions => ["merchant_id=?",1])
哪個(gè)ActiveRecord變成了你描述的sql.假設(shè)Merchant和Product之間有一個(gè)聲明的has_many關(guān)聯(lián),那么你可能會更好地使用它,所以類似于:
ave_prices = Merchant.find(1).products.average(:sales_price,:group => "DATE(created_at)")
(我希望您對模型的描述為“products_sold”是某種轉(zhuǎn)錄錯(cuò)誤,順便說一下 – 如果沒有,您的課程命名就會有點(diǎn)消息!)
畢竟,你回到了開始的地方,但是你以更傳統(tǒng)的Rails方式到達(dá)那里(Rails真的很重視慣例!).現(xiàn)在我們需要填補(bǔ)空白.
我假設(shè)你知道你的日期范圍,讓我們說它被定義為從from_date到to_date的所有日期.
date_aves = (from_date..to_date).map{|dt| [dt,0]}
這會將完整的日期列表構(gòu)建為數(shù)組.我們不需要得到平均值的日期:
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
這一批看起來有點(diǎn)混亂:我認(rèn)為它可能更溫和,更清潔.我正在研究構(gòu)建一個(gè)Hash或Struct,而不是留在數(shù)組中.
[1]我并不是說不使用sql – 在ActiveRecord無法生成最有效查詢的情況下會發(fā)生這種情況,并且您會依賴于find_by_sql.這很好,它應(yīng)該是這樣的,但我認(rèn)為你應(yīng)該嘗試使用它作為最后的手段.
總結(jié)
以上是生活随笔為你收集整理的mysql avg 时间_MySQL或Rails在特定日期范围内每天获得AVG的最佳方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: localdate获取几个月前_关于近期
- 下一篇: mysql中如何操作字符串_mysql