Вы неправильно используете группу MySQL по своему расширению. Хотя MySQL позволяет помещать элементы в список выбора, которые не входят в группу, или агрегат, он не является детерминированным, и ORDER BY не поможет.
MySQL documents состояния:
Сервер может свободно выбрать любое значение из каждой группы, так что, если они не совпадают, значение, выбранное неопределенно. Более того, выбор значений из каждой группы не может зависеть от добавления предложения ORDER BY.
Таким образом, даже если данные были как:
ProductName | Price
------------+----------
A | 2.50
A | 3.50
B | 9.99
Использование GROUP BY Product.Name ORDER BY Price DESC
не гарантированно вернуть самую высокую цену для каждого продукта. то есть
ProductName | Price
------------+----------
A | 3.50
B | 9.99
То, что вы действительно говорите, «дайте мне одну цену для каждого продукта (любой ценой), то заказ окончательные результаты по цене». Таким образом, вы можете так же легко получить 2,50, так как цена на товар А я думаю, что вы могли бы получить результаты, которые вы хотите с помощью `MAX
:
SELECT product.name,
Max(product.price) AS Price
FROM purchased,
product
WHERE purchased.date1 > '2013-11-02'
GROUP BY product.name
ORDER BY price DESC;
Я подозреваю, что вы также отсутствует связь между продуктом и купил, это будет следует избегать, если you used the newer ANSI 92 explicit join syntax, неявных присоединиться синтаксис вы используете 20 лет неактуально:
Так окончательный запрос будет что-то вроде:
SELECT product.name,
Max(product.price) AS Price
FROM purchased
INNER JOIN product
ON product.id = purchased.productid
WHERE purchased.date1 > '2013-11-02'
GROUP BY product.name
ORDER BY price DESC;
NB Я должен был догадываться о взаимосвязи между Продуктом и Приобретенным
Возможно, вы должны указать в своем запросе, как связаны две таблицы. – marcosh
Каков результат? – wumpz