MySQL返回统计表中每个VM的总容量

时间:2018-10-03 01:36:37

标签: mysql select distinct

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

每个VM将具有一个或多个磁盘,这意味着对于每个日期戳,每个日期戳每个VM可能会有多于一行的数据。

raw stats table

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

这就是我尝试过的。

查询尝试1:

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

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

results with wrong capacity

查询尝试2:

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

该查询为我提供了适当的容量结果,但是每个虚拟机的每个日期戳都会得到一行(我有215个虚拟机,并且由于每10分钟间隔我有大约2周的统计信息,所以它返回394701行)

too many rows per vm in these results

所以我想要的是一个混合模式,每个VM 1行结果。有指针吗?

1 个答案:

答案 0 :(得分:0)

您可以将第二个查询包装为子查询,然后选择MAX的{​​{1}}值(应该与其他任何一个相同),并按cap分组:

VM