Rails / SQL:在过去的两周内每天分组并总结

时间:2012-12-17 23:41:00

标签: sql ruby-on-rails ruby arrays group-by

我试着在过去两周内每天总结。

此代码:

Invoice.group('date(filled_at)').sum(:lines_price).to_a

返回:

[["2012-12-15", #<BigDecimal:ac40068,'0.19275E4',18(45)>], ["2012-12-17", #<BigDecimal:a759234,'0.764235E3',18(45)>]]

哪个是正确的但是我需要它返回过去两周的值,即使值是0.0

所以结果应该是:

[["2012-12-03", 0.0], ... , ["2012-12-17", #<BigDecimal:a759234,'0.764235E3',18(45)>]]

谢谢。

更新

having("date(filled_at) > ?", Date.today - 14)

解决了过去14天的问题。但我仍然不知道如何显示0.0值。

1 个答案:

答案 0 :(得分:3)

您将很难在SQL中执行此操作,因为您试图强制db返回不存在的值。在ruby中这样做要容易得多。这是一个简洁的方法:

summary = Invoice.group('date(filled_at)').sum(:lines_price).to_a
past_two_weeks = ((Date.today - 14).. Date.today)

final_result =Hash[*past_two_weeks.map(&:to_s).product([0.0]).flatten].merge Hash[*summary.flatten]

final_result.to_a