2017-07-24 95 views
0

這是我的示例歷史記錄表。

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 

我想類似這樣的輸出:以組

1-02-17 | 15.99 
1-05-17 | 20.99 
1-07-17 | 15.99 

基本上我想要的價格後按日期排序。Rails 5:按日期排序,然後按列分組

這可以通過導軌完成嗎?

+0

ID是否總是1是正常的? Id應該是唯一的,所以這對我來說很奇怪。 如果我正確理解你想要做的是:爲每個價格找到它的最低日期。正確? –

+0

@StephanePaquet這是產品ID,所以它在這裏是非唯一的。我基本上每天檢查產品ID 1的價格,然後我想繪製它。爲了繪製它,我想要上面的輸出。 –

+0

但是爲什麼'1-02-17'與'15.99'而不是'1-03-17'?你是否正在尋找@StephanePaquet認爲的每個價格的最早日期?如果這就是你想要做的,你可能想看看窗口函數。 –

回答

0

如果價格點的數量不高,你可以獲取從數據庫中的記錄,並做到這一點:

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)?