Я бы использовал коррелированный подзапрос:
select t.*
from t
where t.price = (select min(t2.price) from t t2 where t2.item = t.item)
order by t.item;
Для производительности вам нужен индекс на (item, price)
.
Примечание. При этом будет возвращено несколько строк для каждого элемента, если все они имеют одинаковую минимальную цену. Если вы хотите гарантировать один ряд, то вы можете сделать:
select t.*
from t
where t.id = (select t2.id
from t t2
where t2.item = t.item
order by t2.price desc
limit 1
)
order by t.item;