如何获得一个记录是按日期排序

问题描述:

我有一个表是这样的:如何获得一个记录是按日期排序

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

如果您想订购日期的结果,只是用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”部分的内容。我可以看到你在评论中添加了这个,所以我更新了我的答案。 –

您可以使用subqueries。首先从日从您的表的顺序进行选择,然后使用该组由product_id

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