Как выбрать только одну последнюю запись из таблицы?

Есть одна таблица purchase - id, name, provider, price, date
Необходимо выбрать по namе всех provider (уникальных) с последней ценой поставки товара (name)
Выбрать всех поставщиков, конечно, не проблема:
$this->entityManager->createQuery('SELECT DISTINCT p.provider, FROM App\Entity\Purchase p WHERE p.name = ?1')
                    ->setParameter('1', $category["name"]);

Далее. мне было получить последнюю цену от этого поставщика. Если я просто добавлю p.price, то у меня получится куча неуникальных массивов:
Скриншот фрагмента кода удалён модератором.
$this->entityManager->createQuery('SELECT DISTINCT p.provider, p.price FROM App\Entity\Purchase p WHERE p.name = ?1')
                    ->setParameter('1', $category["name"]);

Наверное, можно было бы решить это с помощью ORDER BY date LIMIT 1, но в doctrine, как я понял, сделать это невозможно (или я не правильно думаю).
Как можно построить запрос, чтобы получилось как на картинке? Какой-нибудь MAX или еще что-нибудь? Записи в таблицу вставляются не в хронологическом порядке, т.е. последняя дата может быть не последней записью в таблице
  • Вопрос задан
  • 243 просмотра
Пригласить эксперта
Ответы на вопрос 1
@immelnikoff
Изучаю БД
select
  name,
  provider,
  max(price) as last_max_price -- дело в том, что в последнюю дату для данных name и provider могут быть записи с разными price
from
  (select
    name,
    provider, 
    price,
    rank() over(partition by name, provider order by date desc) as rk
  from purchase) as t
where rk = 1
group by name, provider
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы