【问题标题】:How to retrieve corresponding value of a filed with MAX on other fields in MySQL 4.0.x如何在 MySQL 4.0.x 中的其他字段上检索具有 MAX 的字段的对应值
【发布时间】:2013-02-16 07:30:12
【问题描述】:

首先,我使用的是 MySQL 4.0.27,需要解决此问题 仅限版本。

我在 SELECT 语句中使用 MAX() 与其他字段,需要检索与 MAX 字段的值对应的其他字段的值。

假设表订单中的数据如下:

-------------------------------------------------- ------------ 产品 |类别ID |日期 |排序依据 -------------------------------------------------- ------------ 电视 | 1 | 2011-11-27 |约翰 笔 | 1 | 2011-11-29 |大卫 鼠标 | 2 | 2011-11-30 |麦克风 打印机 | 1 | 2011-10-19 |肉酱 硬盘 | 2 | 2011-11-02 |彼得 -------------------------------------------------- --------------

我的要求是检索每个类别中的订单数量以及最近订单的个人名称,这意味着我需要以下结果:

-------------------------------------------------- ---------------------- 类别ID |订购方式 |订单计数 |日期 -------------------------------------------------- ---------------------- 1 |约翰 | 3 | 2011-11-29 2 |彼得 | 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 这样的函数。

提前致谢。

【问题讨论】:

  • 只是为了确定,对于第 1 类,名字不是大卫吗?对于第 2 类,不会是迈克吗?他们是日期最近的人!
  • 顺便说一句,John 既不是最新的也不是最年长的……你为什么指望 John 在那儿?
  • 我很抱歉;你是对的,结果应该是 Cat 1 的 David 和 Cat 2 的 Mile;但我没有得到这个。

标签: mysql sql


【解决方案1】:

试试:

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

- 假设您希望 OrderBy 值对应于最大日期。

【讨论】:

    【解决方案2】:

    试试:

    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
    

    【讨论】:

      【解决方案3】:

      我总是发现检查manual 对我有很大帮助(尽管它在那里说了什么,如果没有索引找到 MAX 的值,那么这比子选择更有效)

      【讨论】:

        猜你喜欢
        • 2021-09-11
        • 2012-05-19
        • 1970-01-01
        • 1970-01-01
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多