Rails 5:按日期排序,然后按列排序

时间:2017-07-24 23:18:05

标签: ruby-on-rails ruby sorting

这是我的示例历史记录表。

[region].artifacts.[PROJECT-ID].appspot.com

我想获得类似于此的输出:

id |    time   | price
1  | 1-02-17   | 15.99
1  | 1-03-17   | 15.99
1  | 1-04-17   | 15.99
1  | 1-05-17   | 20.99
1  | 1-06-17   | 20.99
1  | 1-07-17   | 15.99
1  | 1-08-17   | 15.99

基本上我想在按日期排序之后对价格进行分组。

这可以用rails完成吗?

1 个答案:

答案 0 :(得分:0)

如果价格点数不高,您可以从db获取记录并执行此操作:

price_ranges, prev_price = {}, nil
ProductHistory.where(product_id: 1).order(:date).find_each do |history|
 price_ranges[history.date] = history.price if history.price != prev_price
 prev_price = history.price
end

在这个循环结束时,你会得到:

{ "1-02-17": 15.99, "1-05-17": 20.99, "1-07-17": 15.99 }

注意:如果Date中的db列,则键将是datetime对象而不是字符串。

如果记录数量很高,我建议你在你的数据库中这样做。这个问题看起来与你的用例非常相似,如果你有mysql,那么你可以自己使用它 How to eliminate only continuous duplicates but not all duplicates in a select query (MySQL)?