我有一个很大的表格,里面有不同日期的不同价格的商品。为了显示价格,我需要一个查询,返回某段时间内最便宜的商品。目前我有:
$query = Offer::query();
$query->whereBetween('date', [..., ...]);
//other where conditions
$query->selectRaw('*, MIN(price) as lowest_price');
$query->groupBy('item_id');我知道我不应该在group by中使用通配符selects,所以我被卡住了。我做了一堆havingRaw解决方案,但没有一个有效。如何进行此查询才能获得正确的结果?
编辑:我将在酒店示例中解释它。我们有一家有房间的酒店,我们可以在不同的时间段给房间提供不同的价格。然后查询将返回指定时间段内的所有可用房间,但如果时间段较长,则可能会多次返回同一房间。在这里,我们可以使用group by,它必须尊重where条件,并返回每个可用房间的最便宜价格(不允许重复的房间)。
发布于 2020-04-03 21:39:16
我不明白你为什么需要这个小组。如果你想获得最便宜的商品(最低价格),只需按价格排序结果并获得第一个。
Offer::whereBetween('date', [..., ...])->where(...)->orderBy('price', 'asc')->first();要获得所有日期及其各自的最低价格,我猜您可以执行以下操作:
Offer::selectRaw("MIN(price) as min_price, date")->where(...)->groupBy('date')->get();https://stackoverflow.com/questions/61012441
复制相似问题