This question already has answers here:
SQL select only rows with max value on a column [duplicate]
(27个答案)
4年前关闭。
我似乎记得在Oracle中可以正常工作,但是我不知道如何在MySQL中正确处理它。
这是我的查询:
运行此命令将产生如下结果:
但我期望它看起来像这样,其中DateTimeStamps与值匹配:
选择了正确的最大值,但没有选择与这些最大值匹配的DateTimeStamps。而是看起来好像每天都在选择第一个DateTimeStamp值。如何更改查询以显示匹配的DateTimeStamps?
注意:按某些内容分组通常在您选择时有意义。如果您需要的只是每天的最大值,则没有必要按
(27个答案)
4年前关闭。
我似乎记得在Oracle中可以正常工作,但是我不知道如何在MySQL中正确处理它。
这是我的查询:
SELECT DateTimeStamp, MAX(Value) FROM t1
GROUP BY YEAR(DateTimeStamp), MONTH(DateTimeStamp), DAY(DateTimeStamp);
运行此命令将产生如下结果:
DateTimeStamp Value
2015-09-09 00:00:29 100
2015-09-10 00:00:05 58
2015-09-11 00:00:57 62
2015-09-12 00:00:49 69
2015-09-13 00:00:43 97
但我期望它看起来像这样,其中DateTimeStamps与值匹配:
DateTimeStamp Value
2015-09-09 03:28:29 100
2015-09-10 03:29:05 58
2015-09-11 03:31:57 62
2015-09-12 03:30:49 69
2015-09-13 03:28:43 97
选择了正确的最大值,但没有选择与这些最大值匹配的DateTimeStamps。而是看起来好像每天都在选择第一个DateTimeStamp值。如何更改查询以显示匹配的DateTimeStamps?
最佳答案
如果只需要除去时间部分,则需要使用date
函数:
SELECT date(DateTimeStamp) AS DateTimeStamp, MAX(Value) AS MaxValue
FROM t1
GROUP BY date(DateTimeStamp);
注意:按某些内容分组通常在您选择时有意义。如果您需要的只是每天的最大值,则没有必要按
YEAR(DateTimeStamp), MONTH(DateTimeStamp), DAY(DateTimeStamp)
分组。08-28 03:25