Mysql max() 和 min() 之间的区别?

标签 mysql function max

我在 mySql 查询和 max() 函数方面遇到问题。 如果我这样做:

Select * from Data group by experiment having min(timestamp)

此查询返回我想要的内容以及正确的值。 我得到了这个:

+----------+---------+----------+---------------------+----------------+------------+
| id       | mote_id | label_id | timestamp           | value          | experiment |
+----------+---------+----------+---------------------+----------------+------------+
|  3768806 |      10 |       30 | 2014-04-22 14:37:07 |              0 |         13 |
| 10989209 |      12 |       22 | 2014-04-25 10:44:03 | 2.532958984375 |         15 |
| 11943537 |       6 |       19 | 2014-05-05 17:20:15 |           1228 |         16 |
| 12042549 |      16 |       26 | 2014-05-06 10:48:59 |          22.86 |         17 |
| 12176642 |      15 |       23 | 2014-05-07 15:19:35 |              0 |         18 |
| 12195344 |      10 |        6 | 2014-05-07 15:27:23 |           3460 |         19 |
| 12222470 |      15 |        8 | 2014-05-07 15:38:38 |              1 |         21 |
| 12343934 |      10 |       19 | 2014-05-12 10:35:42 |            742 |         23 |
+----------+---------+----------+---------------------+----------------+------------+

但是,如果我这样做:

Select * from Data group by experiment having max(timestamp)

此查询返回错误值...如下所示:

+----------+---------+----------+---------------------+----------------+------------+
| id       | mote_id | label_id | timestamp           | value          | experiment |
+----------+---------+----------+---------------------+----------------+------------+
|  3768806 |      10 |       30 | 2014-04-22 14:37:07 |              0 |         13 |
| 10989209 |      12 |       22 | 2014-04-25 10:44:03 | 2.532958984375 |         15 |
| 11943537 |       6 |       19 | 2014-05-05 17:20:15 |           1228 |         16 |
| 12042549 |      16 |       26 | 2014-05-06 10:48:59 |          22.86 |         17 |
| 12176642 |      15 |       23 | 2014-05-07 15:19:35 |              0 |         18 |
| 12195344 |      10 |        6 | 2014-05-07 15:27:23 |           3460 |         19 |
| 12222470 |      15 |        8 | 2014-05-07 15:38:38 |              1 |         21 |
| 12343934 |      10 |       19 | 2014-05-12 10:35:42 |            742 |         23 |
+----------+---------+----------+---------------------+----------------+------------+

在第一个查询中,如果我将 min(timestamp) 替换为 timestamp=min(timestamp),它会起作用,但在第二个查询中,"timestamp =max(timestamp)" 返回什么都没有

最后,选择实验,max(timestamp) 返回正确的值。

mysql> 从实验数据组中选择 *,max(timestamp);

+----------+---------+----------+---------------------+----------------+------------+---------------------+
| id       | mote_id | label_id | timestamp           | value          | experiment | max(timestamp)      |
+----------+---------+----------+---------------------+----------------+------------+---------------------+
|  3768806 |      10 |       30 | 2014-04-22 14:37:07 |              0 |         13 | 2014-04-24 16:03:29 |
| 10989209 |      12 |       22 | 2014-04-25 10:44:03 | 2.532958984375 |         15 | 2014-05-05 10:34:35 |
| 11943537 |       6 |       19 | 2014-05-05 17:20:15 |           1228 |         16 | 2014-05-06 10:35:15 |
| 12042549 |      16 |       26 | 2014-05-06 10:48:59 |          22.86 |         17 | 2014-05-07 15:19:33 |
| 12176642 |      15 |       23 | 2014-05-07 15:19:35 |              0 |         18 | 2014-05-07 15:27:23 |
| 12195344 |      10 |        6 | 2014-05-07 15:27:23 |           3460 |         19 | 2014-05-07 15:38:01 |
| 12222470 |      15 |        8 | 2014-05-07 15:38:38 |              1 |         21 | 2014-05-07 16:30:38 |
| 12343934 |      10 |       19 | 2014-05-12 10:35:42 |            742 |         23 | 2014-05-14 09:25:44 |
+----------+---------+----------+---------------------+----------------+------------+---------------------+

我知道我可以创建一个子查询来解决我的问题,但是表包含数千行,并且这个解决方案太长了......

Ps:即使它有效,我也无法使用 Select*, max(timestamp),因为查询是由 JEE 中的 EJB 运行的。

最佳答案

您选择按字段实验分组的未确定值。没有人可以向您保证非聚合字段将对应于某些聚合字段的 MIN 或 MAX 值。

您必须使用子查询或自连接来获取正确的记录。

在此处查看更多信息:http://dev.mysql.com/doc/refman/5.6/en/example-maximum-column-group-row.html

关于Mysql max() 和 min() 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23648004/

相关文章:

php - 使用 .Post() 将 JQuery 变量传递给 PHP

php - 初学者 : Delete row from Table and Database PHP/HTML/MySQL

linq-to-sql - 返回表的 SQL Server 2008 函数是否像存储过程一样得到优化?

c# - ElasticSearch(C#Nest)中的多个最大/最小聚合

mysql - 优化 SELECT {OTHER_COLUMNS} IN MAX....GROUP BY 语句

mysql - 如何让 mySql 返回 Select JOIN with Count?

mysql - MySQL如何比较日期时间并获取第一个和最后一个日期

c++ - 如何有一个 vector 的复制构造函数?

javascript - 添加 onclick=window.location=mailto : where recipient is a variable in a function

java - 显示一次答案