如何获取按日期排序的一条记录

我有一个这样的表:</ p>

  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
</ code> </ pre>

我想按 product_id </ code>进行分组,并为每个 product_id </ code>只获取一个最新产品。 我还有一个最小和最大价格变量应该应用于 price </ code>列。</ p>

我的查询结果应为:</ p>

<前> 1 1001 100 2017-05-29
4 1003 106 2017-06-07
5 1005 106 2017-04-30
</ code> </ pre>

是否可以通过 SQL </ code>或者我应该使用应用程序端?</ p>
</ div>

展开原文

原文

I have a table like this:

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

I want to group by product_id and get only one latest product for each product_id. I also have a min and max price variable which should be applied to the price column.

the result of my query should be:

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

Is it possible by SQL or I should use application side?

dongyoulou4829
dongyoulou4829 每个product_id的最后记录?同一product_id也可能有相同的日期吗?
大约 3 年之前 回复
doulu4316
doulu4316 我的记录应该按product_id分组,我有两个$min和$max的值,我应该在查询之间使用。
大约 3 年之前 回复
dosgy00204
dosgy00204 最后的记录有多少?您想使用laravel查询构建器还是雄辩?这是一个简单的SQL查询。但你需要更好地解释。
大约 3 年之前 回复
dtv8189
dtv8189 对不起,最后的记录。
大约 3 年之前 回复
du9826
du9826 您希望按日期对行进行排序并仅获取最后一条记录,但您的预期结果显示为3,并且它们与升序或降序排序无关。请你说清楚。
大约 3 年之前 回复

2个回答



如果您想按日期订购结果,只需使用 orderBy()</ code>:</ p>

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

或者它的快捷方式 latest()</ code>和 oldest()</ 代码>:</ p>

  Model :: latest('date_column') - &gt; ... 
</ code> </ pre>
</ div>

展开原文

原文

If you want to order results by date, just use orderBy():

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

Or it's shortcuts latest() and oldest():

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

dphj737575
dphj737575 你没有说出有关分组或部分之间的任何信息。 我可以看到你在评论中添加了这个,所以我更新了我的答案。
大约 3 年之前 回复
doujiling4377
doujiling4377 您的查询可能会返回两个product_id的ID。
大约 3 年之前 回复



您可以使用子查询。 首先从日期的表顺序中选择,然后使用它按 product_id </ code>进行分组:</ p>

  SELECT * FROM(SELECT * FROMyour_tablet ORDER 按日期desc)作为date_ordered group by product_id ORDER by id 
</ code> </ pre>
</ div>

展开原文

原文

You can use subqueries. First select from your table order by date, then use that to group by product_id:

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问