我的数据库中有以下表格:
-------------------------------------------
| 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 (值))!!!
答案 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)
相对应,并将消除其他值。