2017-06-04 102 views
1

我有一個表是這樣的:如何獲得一個記錄是按日期排序

id product_id price  date 
1  1001  100  2017-05-29 
2  1005  101  2017-03-30 
3  1001  102  2017-03-30 
4  1003  106  2017-06-07 
5  1005  106  2017-04-30 

我想按product_id並獲得唯一一個最新的產品每個product_id。我也有最小和最大價格變量,應該應用於price列。

我查詢的結果應該是:

1  1001  100  2017-05-29 
4  1003  106  2017-06-07 
5  1005  106  2017-04-30 

是否有可能通過SQL或者我應該使用應用程序的一面呢?

+0

你想按日期排剛剛過去的記錄進行排序,並取,但您預期的結果顯示了3個,而且也沒有相關性對他們無論是升序還是降序排序。請讓自己清楚。 – Sandeesh

+0

對不起,最後一個記錄's'。 –

+0

最近有多少條記錄?你想使用laravel查詢生成器還是雄辯?這是一個簡單的SQL查詢。但你需要更好地解釋。 – Sandeesh

回答

3

如果您想訂購日期的結果,只是用orderBy()

Model::orderBy('date_column', 'desc')->whereBetween('price', [$min, $max])->groupBy('product_id')->take(3)->get(); 

,或者它的快捷方式latest()oldest()

Model::latest('date_column')->... 
+0

您的查詢可能會返回'product_id'的兩個'ids'。 –

+0

@ S.M_Emamian你沒有告訴任何有關分組或「between」部分的內容。我可以看到你在評論中添加了這個,所以我更新了我的答案。 –

0

您可以使用subqueries。首先從日從您的表的順序進行選擇,然後使用該組由product_id

SELECT * FROM (SELECT * FROM `your_table` t ORDER by date desc) as date_ordered group by product_id ORDER by id