SQL GROUP BY和MAX

时间:2014-08-04 21:28:50

标签: mysql sql group-by max


我的数据库中有以下表格:

-------------------------------------------
| value  | category |         date        |
-------------------------------------------
| 12.2   | A        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 13.3   | A        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 11.0   | B        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 11.2   | C        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 19.2   | C        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 10.4   | C        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------

我正在尝试获得最大值(12.2,13.3,..)和相应于每个类别(A,B,C)的此值的日期。

就像这样:

-------------------------------------------
| value  | category |         date        |
-------------------------------------------
| 13.3   | A        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 11.0   | B        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------
| 19.2   | C        | yyyy-MM-dd HH:mm:ss | 
-------------------------------------------

我已关注此链接SQL: How to select a max value for each group per day?

所以我提出了这个问题:

SELECT MAX(value), category, date FROM myTable GROUP BY category;

但由于某种原因,我不知道为什么它没有给我我正在寻找的东西,它给了我一个错误的 DATE 的值(DATE不符合Max (值))!!!

2 个答案:

答案 0 :(得分:1)

您可以使用子查询执行此操作。

SELECT MAX(t.value), 
    t.category,
    (SELECT m.date FROM myTable as m 
     WHERE m.value = MAX(t.value) AND m.category = t.category) as Category
FROM myTable as t
GROUP BY category;

答案 1 :(得分:1)

  

但由于某种原因,我不知道为什么它没有给我什么我的   寻找,它给了我一个错误的价值

在这种情况下,它没有给出正确的值:

SELECT MAX(value), category, date FROM myTable GROUP BY category;

是这样的,当你在mysql的select子句中包含一个未包含在group by中的列,也不包含像date这样的聚合函数时,mysql会为它选择一个任意值,这样它就会给出错误的值,而不是与最大值相对应的值。


  

我试图获得最大值(12.2,13.3,..)和 日期   对应于每个类别(A,B,C)的此值

要获得与date对应的MAX(value),请尝试此操作:

SELECT t1.*
FROM myTable AS t1
INNER JOIN
(
  SELECT MAX(value) AS MaxV, category
  FROM myTable AS t1
  GROUP BY category
) AS t2 ON  t2.MaxV     = t1.value
        AND t1.Category = t2.category;

子查询的连接将确保返回的日期值与Max(value)相对应,并将消除其他值。