MySQL:为每个位置和服务器查找列的最大值

标签 mysql sql

我有下表:

++++++++++++++++++++++++++++++++++++++++++++++++++
| location | server | datetime         | max_cpu |
++++++++++++++++++++++++++++++++++++++++++++++++++
| Chicago  | 1      | 2013-05-01 00:00 | 10      |
| Chicago  | 1      | 2013-05-01 01:00 | 15      |
| Chicago  | 1      | 2013-05-01 02:00 | 11      |
| Chicago  | 2      | 2013-05-01 00:00 | 8       |
| Chicago  | 2      | 2013-05-01 01:00 | 12      |
| Chicago  | 2      | 2013-05-01 02:00 | 13      |
| Atlanta  | 1      | 2013-05-01 00:00 | 11      |
| Atlanta  | 1      | 2013-05-01 01:00 | 12      |
| Atlanta  | 1      | 2013-05-01 02:00 | 19      |
| Atlanta  | 2      | 2013-05-01 00:00 | 21      |
| Atlanta  | 2      | 2013-05-01 01:00 | 15      |
| Atlanta  | 2      | 2013-05-01 02:00 | 17      |

我需要给定日期每个位置每个盒子的最大 CPU,例如

++++++++++++++++++++++++++++++++++++++++++++++++++
| location | server | datetime         | max_cpu |
++++++++++++++++++++++++++++++++++++++++++++++++++
| Chicago  | 1      | 2013-05-01 01:00 | 15      |
| Chicago  | 2      | 2013-05-01 02:00 | 13      |
| Atlanta  | 1      | 2013-05-01 02:00 | 19      |
| Atlanta  | 2      | 2013-05-01 00:00 | 21      |

我知道如何针对单个条件(例如,仅位置)执行此操作并尝试扩展它(见下文),但它没有提供我需要的输出。

SELECT a.location, a.server, a.datetime, a.max_cpu 
  FROM mytable as a INNER JOIN 
  (
    SELECT location, server, max(max_cpu) as max_cpu
    FROM mytable
    GROUP BY location, server
  ) 
  AS b ON 
  (
    a.location = b.location
    AND a.server = b.server
    AND a.max_cpu = b.max_cpu
  )

最佳答案

您可以通过找到最大 CPU 并连接回原始表来完成此操作。

看来你想要最大值的时间以及数量(这在文本中没有明确说明,但在结果中很清楚):

select t.*
from mytable t join
     (select location, server, DATE(datetime) as thedate, MAX(max_cpu) as maxmaxcpu
      from mytable t
      group by location, server, DATE(datetime)
     ) lsd
     on lsd.location = t.location and lsd.server = t.server and
        lsd.thedate = DATE(t.datetime) and lsd.maxmaxcpu = t.max_cpu

这会计算每天的 maxcpu,然后返回以获取原始数据中的适当行 或行。如果有多个记录有 max,您将获得所有记录。如果您只需要一个,您可以将 group by location, server, day(datetime) 添加到查询中。

关于MySQL:为每个位置和服务器查找列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16319602/

相关文章:

php - 我想统计我的表中的特定 ID

mysql - 重试mysql中的死锁

php mysql用户信息更新

MySQL基于JOIN的列重复SUM

sql - SQLite:使用ID和哈希值合并两个表,其中得到的ID来自所选表

mysql - SQL - 如何从内部语句中选择 TOP 5

mysql - 选择所有客户,除非他们有其他产品 - SQL

php - 使用连接表和用户 ID 输出重复的数据行

SQL 计算重叠集的不同元素

c++ - 在不使用MySQL的INSERT关键字的情况下使用C在MySQL中的表中插入一行