Как получить соответствующее значение поля с MAX на других полях в MySQL 4.0.x - PullRequest
1 голос
/ 30 ноября 2011

Для начала я использую MySQL 4.0.27 и мне нужно решение для этого только версия.

Я использую MAX () в операторе SELECT с другими полями, и мне нужно получить значение других полей, соответствующее значению поля MAX.

Предположим ниже данные из таблицы Заказы :

--------------------------------------------------------------
Product    |      CategoryID     |   Date      |    OrderBy
--------------------------------------------------------------
TV         |     1               |  2011-11-27 |   John
Pen        |     1               |  2011-11-29 |   David
Mouse      |     2               |  2011-11-30 |   Mike
Printer    |     1               |  2011-10-19 |   Rozi
HDD        |     2               |  2011-11-02 |   Peter
----------------------------------------------------------------

Мое требование - получить количество заказов в каждой категории с именами лиц с недавним Заказом, что означает, что мне нужен следующий результат:

--------------------------------------------------------------------------
CategoryID     |    OrderBy       |      Order_Count      |    Date
-------------------------------------------------------------------------
1             |    John          |      3                |    2011-11-29
2             |    Peter         |      2                |    2011-11-30

Если я использую ниже SQL:

SELECT CategoryID, OrderBy, COUNT(OrderID) AS Order_count, MAX(Date)
FROM Orders
GROUP BY CategoryID

Я не получаю желаемого результата. Я получаю другое имя в OrderBy вместо того же имени, которое падает против извлеченной даты.

Может кто-нибудь подсказать, как этого добиться в MySQL 4.0.x, где у нас есть ограничение на неиспользование внутреннего запроса или таких функций, как GROUP_CONCAT.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2011

Я всегда нахожу большую помощь, чтобы проверить в руководстве (хотя, несмотря на то, что там сказано, если значение для поиска MAX не проиндексировано, то это более эффективно, чем подпрограмма-выбор)

0 голосов
/ 01 декабря 2011

Попробуйте:

SELECT a.CategoryID, b.OrderBy, COUNT(DISTINCT a.id), MAX(a.Date) 
FROM Orders a 
INNER JOIN Orders b ON a.CategoryID = b.CategoryID 
GROUP BY a.CategoryID 
ORDER BY a.Date DESC,b.Date ASC
0 голосов
/ 30 ноября 2011

Попробуйте:

SELECT CategoryID, OrderBy, COUNT(OrderID) AS Order_count, Date
FROM Orders
GROUP BY CategoryID
ORDER BY Date Desc

- при условии, что вы хотите значение OrderBy, соответствующее максимальной дате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...