mysql - SQL 分组依据和最大值

标签 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;

但由于某种原因,我不知道为什么它没有给我想要的东西,它给了我一个错误的日期值(日期与最大日期不对应) (值))!!!

最佳答案

But for some reason i don't know why it doesn't gave me what i'm looking for, it gave's me a wrong value

在这种情况下它没有为您提供正确值的原因:

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

是这样的,当您在mysql的select子句中包含不包含在group by或像date这样的聚合函数中的列时code>,mysql为它选择任意值,这样它就会给你错误的值,而不是对应于最大值的值。

<小时/>

And i'm trying to get the Maximum Value(12.2, 13.3,..) and the date correspondant to this value of each Category(A, B, C).

要获取与 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)相对应,并消除其他值。

关于mysql - SQL 分组依据和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25127858/

相关文章:

MySQL 动态显示来自具有出现次数的列的不同值?

sql - 存储关注用户的最佳方式

python - Dask 数据框中的多个聚合用户定义函数

mysql - 使用 GROUP BY、ORDER BY 和 GROUP_CONCAT 进行索引

SQL查询分组参数最大值

mysql - 我应该使用哪种连接? 【EF4.0代码优先】

php - Mysql查询日期格式、phpmailer

MySQL 查询到 XQuery

php - PDO 获取返回空值

sql - DB2 存储过程 IF 语句