Fix*_*ier 3 mysql datetime greatest-n-per-group
我的数据库中有以下内容:
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%
Run Code Online (Sandbox Code Playgroud)
我想得到每个ID和类型记录的最后日期:
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%
Run Code Online (Sandbox Code Playgroud)
fan*_*nts 15
您可以使用GROUP BY,但了解其工作原理非常重要.
当您使用GROUP BY一组行折叠为一个并且在GROUP BY子句中未使用的其他列中显示的内容时,可以通过使用聚合函数来确定,也可以是该组中的随机行.您不能确定获取与显示的行相对应的行,该行包含MAX()您使用的值或任何聚合函数.当您执行以下查询时,这变得尤为明显:
SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
"another_column"可以属于包含MIN()值或MAX()值的行,甚至可以属于根本不显示的另一行.在除MySQL之外的其他RDBMS中,实际上禁止选择不使用聚合函数或未在GROUP BY子句中列出的列,只是为了防止用户犯错误或认为他们得到了正确的结果.
因此,在您的情况下,您似乎也希望显示"值"列.由于上述原因,juergen_d的答案是错误的,因为它没有选择"值",如果可以的话,你不能确定它是正确的"价值".菲利普席尔瓦的回答是错误的,因为它按"价值"分组.这样做会在你的情况下实际返回整个表.Romesh的答案是错误的,因为使用两次MAX()函数会得到最大值,显然不是与datetime值对应的值.
那么,你怎么做呢?这里描述了3种方式.通过自己应用它们来学习它们.这不是很难:)
| 归档时间: |
|
| 查看次数: |
15464 次 |
| 最近记录: |