【问题标题】:Eloquent groupBy with MIN condition具有 MIN 条件的 Eloquent groupBy
【发布时间】:2020-07-15 15:44:17
【问题描述】:

我有一张大桌子,上面有不同日期不同价格的商品。要显示价格,我需要一个在某个时间段内返回最便宜商品的查询。目前我有:

$query = Offer::query();
$query->whereBetween('date', [..., ...]);
//other where conditions
$query->selectRaw('*, MIN(price) as lowest_price');
$query->groupBy('item_id');

我知道我不应该在 group by 中使用通配符选择,所以我被卡住了。我做了一堆haveRaw解决方案,但没有一个奏效。 如何进行此查询以获得正确的结果?

编辑: 我将在酒店示例中进行解释。我们有一家有房间的酒店,我们可以在不同的时间段给房间不同的价格。然后查询将返回指定时间段内的所有可用房间,但如果时间段很长,这可能会多次返回同一个房间。在这里我们可以使用 group by which 必须尊重 where 条件并为每个可用房间返回最便宜的价格(不允许重复房间)。

【问题讨论】:

标签: mysql laravel eloquent group-by


【解决方案1】:

我不明白你为什么需要 group by。如果您想获得最便宜的商品(最低价格),只需按价格排序您的结果并获得第一个。

Offer::whereBetween('date', [..., ...])->where(...)->orderBy('price', 'asc')->first();

要获取所有日期及其各自的最低价格,我想您可以执行以下操作:

Offer::selectRaw("MIN(price) as min_price, date")->where(...)->groupBy('date')->get();

【讨论】:

  • 我认为他需要日期范围内每件商品的最低价格。
  • 是的,每个项目。
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 2021-04-06
  • 2018-05-28
  • 2017-08-25
  • 2020-08-24
  • 2022-07-06
  • 2017-01-11
  • 2014-01-10
相关资源
最近更新 更多