簡體   English   中英

Rails-如何從數組模型中獲取分組數據?

[英]Rails - how to get grouped data from model in array?

我在DB表之一中具有此數據結構:

id | user_id | amount | created_at
 1 |    1    |   3.4  | 2013-09-14 10:10:00 
 2 |    1    |   2.1  | 2013-09-17 10:10:00
 3 |    1    |   7.9  | 2013-09-17 10:10:00
 4 |    1    |   0.2  | 2013-09-16 10:10:00
 5 |    1    |   6.3  | 2013-09-18 10:10:00
 6 |    1    |   11.9 | 2013-09-18 10:10:00

所需的輸出:[0,0,3.4 0,0.2%,10,18.2] -我需要在陣列總結了柱為每一天用於各個用戶在過去的7天得到。

到目前為止,我能夠得到如下信息:

Model.where('user_id = ? AND created_at > ? AND created_at < ?', current_user.id, week, today).group(:created_at).sum(:amount)

產生以下格式的數據:

{2013-09-13 23:00:39 UTC=>5.68, 2013-09-16 23:30:35 UTC=>2.55}

是否可以通過一個查詢以我需要的格式獲取數據?

編輯:設置“零天”:

  today = Date.today
  week = today - 7
  daily = Model.where('user_id = ? AND created_at > ? AND created_at < ?', current_user.id, week, today).group(:created_at).sum(:amount)
  new_value_in_array = false
  unless daily.empty?
    @daily = Array.new
    week.upto(today) do |step|
      daily.each do |d|
        if step.to_s == d[0].strftime('%Y-%m-%d').to_s
          @daily << d[1]
          new_value_in_array = true
        end
      end
      if new_value_in_array == false
        @daily <<  0
      end
      new_value_in_array = false          
    end
  end

我構建了此代碼段,該代碼段將檢查過去一周內數據庫中沒有數據的日期。 它正在運行,但是我認為它不是很有效,因為如果我想檢查過去一個月/ 3個月/ 6個月的數據,則計算將花費大量時間。

對於更有效的解決方案有什么建議嗎?

非常感謝!

這就是你想要的嗎?

Model.where('user_id = ? AND created_at > ? AND created_at < ?', current_user.id, week, today).group(:created_at).sum(:amount).values
start_date =  Date.today - 7
end_date = Date.today

# get sum for non zero dates
hsh = Model.where('user_id = ? AND created_at > ? AND created_at < ?', current_user.id, start_date, end_date).group(:created_at).sum(:amount)
# =>  [3.4, 0.2, 10, 18.2]

#add zero dates to the hsh
start_date.step(end_date,1).map{|d| hsh[d] ||= 0 }
# => [0, 0, 3.4, 0, 0.2, 10, 18.2] 

#dates with zero sum
hsh.select{|k,v| v ==0 }.keys
# => [2013-09-12, 2013-09-13, 2013-09-15]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM