Mysql возвращает общую емкость для каждой виртуальной машины в таблице статистики - PullRequest
0 голосов
/ 03 октября 2018

У меня есть таблица, которая содержит строки данных для 215 виртуальных машин.Каждая строка содержит следующую информацию: имя виртуальной машины, метка даты, диск, емкость, пропускная способность, iops и т. Д.

каждая виртуальная машина будет иметь один или несколько дисков, что означает, что для каждой метки даты может быть несколько строк данных.для каждого vm на дату.

raw stats table

Мне нужны результаты с общей емкостью диска на виртуальную машину.Неважно, из какой даты я получаю данные, поскольку она обычно остается одинаковой для каждой даты.Однако не все виртуальные машины существуют во время каждой отметки даты.

Итак, вот что я попробовал.

Попытка запроса 1:

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

Проблема здесь в том, что я получаю результатыдля каждой виртуальной машины, но вместо суммы емкости для одной метки даты, она суммирует ВСЕ метки даты для этой виртуальной машины, что означает, что емкость является ПУТЬ высокой

results with wrong capacity

попытка запроса 2:

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

этот запрос дает мне правильные результаты по емкости, но я получаю строку для каждой метки даты для каждой виртуальной машины (у меня 215 vms, и он возвращает 394701 строк, потому что у меня есть статистика за 2 недели10-минутные интервалы)

too many rows per vm in these results

Так что мне бы хотелось, чтобы это был гибрид, 1 ряд результатов на ВМ.какие-нибудь указатели?

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете просто свернуть свой второй запрос как подзапрос и выбрать значение MAX, равное cap (которое должно совпадать с любым другим), сгруппировав по VM:

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