如何获得一个记录是按日期排序
问题描述:
我有一个表是这样的:如何获得一个记录是按日期排序
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
或者我应该使用应用程序的一面呢?
答
如果您想订购日期的结果,只是用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
你想按日期排刚刚过去的记录进行排序,并取,但您预期的结果显示了3个,而且也没有相关性对他们无论是升序还是降序排序。请让自己清楚。 – Sandeesh
对不起,最后一个记录's'。 –
最近有多少条记录?你想使用laravel查询生成器还是雄辩?这是一个简单的SQL查询。但你需要更好地解释。 – Sandeesh