Mysql return 统计信息中每个 VM 的总容量 table

Mysql return total capacity for each VM in stats table

我有一个 table,其中包含 215 个虚拟机的数据行。每行有以下信息 VM 名称、日期戳、磁盘、容量、吞吐量、iops 等

每个虚拟机将有一个或多个磁盘,这意味着对于每个日期戳,每个虚拟机的每个日期戳可能有不止一行数据。

我需要的是每个 VM 的总磁盘容量的结果。我从哪个日期戳获取数据并不重要,因为每个日期戳通常都保持不变。但是,并非所有 VM 在每个日期戳期间都存在。

这就是我尝试过的方法。

查询尝试 1:

SELECT DISTINCT `VM`, SUM(CapacityGB) as cap FROM stats Group By `VM`

这里的问题是我得到了每个 VM 的结果,但不是单个日期戳的容量总和,而是该 VM 的所有日期戳的总和,这意味着容量很高

查询尝试 2:

SELECT DISTINCT `VM`,`datestamp`, SUM(CapacityGB) as cap FROM stats Group By `VM`,`datestamp`

此查询为我提供了正确的容量结果,但我得到了每个 VM 的每个日期戳的一行(我有 215 个虚拟机,它 returns 394701 行,因为我在 10 个虚拟机上有大约 2 周的统计数据分钟间隔)

所以我想要的是混合的,每个 VM 有 1 行结果。有什么指点吗?

你可以将你的第二个查询包装成一个子查询和 select capMAX 值(应该与其他任何一个相同),分组依据VM:

SELECT VM, MAX(cap)
FROM (SELECT `VM`,`datestamp`, SUM(CapacityGB) as cap 
      FROM stats 
      GROUP BY `VM`,`datestamp`) s
GROUP BY VM