首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL从多个获取上次日期记录

MySQL从多个获取上次日期记录
EN

Stack Overflow用户
提问于 2013-10-22 17:54:04
回答 2查看 18K关注 0票数 3

我的数据库中有以下内容:

代码语言:javascript
运行
复制
ID      datetime             type   value
1094    2013-09-25 09:11:18  HDD      89%
1094    2013-09-25 09:11:18  CPU      55%
1093    2013-09-25 09:11:18  HDD      77%
1093    2013-09-25 09:11:18  CPU      55%
1094    2013-09-25 08:21:28  HDD      85%
1094    2013-09-25 08:21:28  CPU      11%
1093    2013-09-25 07:04:00  HDD      76%

我想要获取每个ID和类型记录的最后日期:

代码语言:javascript
运行
复制
1094    2013-09-25 09:11:18  HDD      89%
1094    2013-09-25 09:11:18  CPU      55%
1093    2013-09-25 09:11:18  HDD      77%
1093    2013-09-25 09:11:18  CPU      55%
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-22 18:19:48

您可以使用GROUP BY,但重要的是要了解它的工作原理。

使用GROUP BY时,一组行会折叠成一组,而在GROUP BY子句中未使用的其他列中显示的内容将由聚合函数确定,或者是该组中的随机行。您不能确保获得与所显示的持有MAX()值或您使用的任何聚合函数的行相对应的行。当您执行如下查询时,这一点变得尤为明显:

代码语言:javascript
运行
复制
SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id

"another_column“可以属于包含MIN()值或MAX()值的行,甚至可以属于根本不显示的另一行。在MySQL以外的其他关系数据库管理系统中,实际上禁止选择不使用聚合函数或未在GROUP BY子句中列出的列,这只是为了防止用户出错或认为他们得到了正确的结果。

因此,在您的示例中,您似乎也希望显示列"value“。由于上述原因,juergen_d的答案是错误的,因为它没有选择"value",如果选择了"value“,您就不能确定它是正确的”value“。菲利普·席尔瓦的答案是错误的,因为它是按“价值”分组的。在您的例子中,这样做实际上会返回整个表。Romesh的答案是错误的,因为使用两次MAX()函数将得到最大值,显然,但不是对应于日期时间值的值。

那么,你要怎么做呢?Here 3 ways are described。通过自己应用它们来学习它们。这并不难:)

票数 16
EN

Stack Overflow用户

发布于 2013-10-22 17:57:42

代码语言:javascript
运行
复制
select id, type, max(datetime)
from your_table
group by id, type
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19514532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档