Красноречивая группа с условием MIN - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть большая таблица предметов с разной ценой на разные даты. Для отображения цен мне нужен запрос, который возвращает самый дешевый товар за определенный период времени. В настоящее время у меня есть:

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

Я знаю, что я не должен использовать групповые выборки с группой по, поэтому я застрял. Я сделал кучу решений с Raw, но ни одно из них не сработало. Как я могу сделать этот запрос, чтобы получить правильные результаты?

РЕДАКТИРОВАТЬ: я объясню на примере отеля. У нас есть отель с номерами, и мы можем дать разные цены на номера в разные периоды времени. И тогда запрос вернет все доступные комнаты за указанный период времени, но это может вернуть одну и ту же комнату несколько раз, если период времени будет длинным. И здесь мы можем использовать группу, которая должна соблюдать условия и возвращать самые дешевые цены для каждого доступного номера (дублированные номера не допускаются).

1 Ответ

0 голосов
/ 03 апреля 2020

Я не понимаю, зачем тебе группа. Если вы хотите получить самый дешевый товар (минимальную цену), просто закажите свой результат по цене и получите первый.

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

Чтобы получить все даты с соответствующими минимальными ценами, я думаю, вы могли бы сделать следующее:

Offer::selectRaw("MIN(price) as min_price, date")->where(...)->groupBy('date')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...