получение совокупности из нескольких объединений с максимальной датой - PullRequest
0 голосов
/ 16 октября 2019

3 стола

<h>DesktopGroup</h>
<table style="undefined;table-layout: fixed; width: 81px"><colgroup><col style="width: 25px"><col style="width: 55.5px"></colgroup><tr><th>id</th><th>name</th></tr><tr><td>1</td><td>group1</td></tr><tr><td>2</td><td>group2</td></tr></table>

<h>machines</h>
<table style="undefined;table-layout: fixed; width: 198px"><colgroup><col style="width: 31px"><col style="width: 67px"><col style="width: 99.5px"></colgroup><tr><th>id</th><th>name</th><th>Desktopgroupid</th></tr><tr><td>1</td><td>server1</td><td>1</td></tr><tr><td>2</td><td>server2</td><td>1</td></tr><tr><td>3</td><td>server3</td><td>2</td></tr></table>

<h>loadindex</h>
<table style="undefined;table-layout: fixed; width: 456px"><colgroup><col style="width: 28px"><col style="width: 61px"><col style="width: 89px"><col style="width: 277.5px"></colgroup><tr><th>id</th><th>load</th><th>machineid<br></th><th>Createdate</th></tr><tr><td>1</td><td>7654</td><td>1</td><td>2019-10-15 16:54:31.430</td></tr><tr><td>2</td><td>1235</td><td>1</td><td>2019-10-15 16:44:00.430</td></tr><tr><td>3</td><td>4443</td><td>1</td><td>2019-10-15 16:34:31.000</td></tr><tr><td>4</td><td>2345</td><td>1</td><td>2019-10-15 16:25:15.222</td></tr><tr><td>5</td><td>3456</td><td>2</td><td>2019-10-15 16:54:31.430</td></tr></table>
каждая настольная группа имеет x количество серверов, и каждый сервер имеет заданную нагрузку на определенный момент времени. (примерно каждые 5 минут), так что я пытаюсь получить desktopgroup.name, avg (нагрузка) для всех машин в группе для максимальной (дата) загрузки.
select loadvalues.avgload, dg.Name
from CitrixMonitoring.DesktopGroups as dg
join CitrixMonitoring.Machines as m on m.DesktopGroupId = dg.id
join (select LoadIndex.MachineId, avg(LoadIndex.EffectiveLoadIndex) as avgload, max(LoadIndex.[CreatedDate]) as maxdate
from CitrixMonitoring.LoadIndex group by MachineId) as [loadvalues] on m.id = loadvalues.MachineId
where dg.name like 'live - call center desktop'
group by dg.name, loadvalues.avgload

Я получаю

3185    LIVE - Call Center Desktop
3236    LIVE - Call Center Desktop
3249    LIVE - Call Center Desktop
3263    LIVE - Call Center Desktop
3288    LIVE - Call Center Desktop
3295    LIVE - Call Center Desktop

Ожидаемый результат должен составлять одну строку со средней загрузкой для desktopgroup

3185    LIVE - Call Center Desktop

1 Ответ

0 голосов
/ 16 октября 2019

Просто GROUP BY dg.name. Когда вы включаете loadvalues.avgload в предложение GROUP BY, это означает, что вы хотите отдельную строку для каждого отдельного значения avgload.

Но поскольку вы просто выбираете один dg.name в *Пункт 1008 *, в конце нет нужды в GROUP BY. Так и должно быть.

select loadvalues.avgload, loadvalues.maxdate, dg.Name
from CitrixMonitoring.DesktopGroups as dg
join CitrixMonitoring.Machines as m on m.DesktopGroupId = dg.id
join (select LoadIndex.MachineId, avg(LoadIndex.EffectiveLoadIndex) as avgload, max(LoadIndex.[CreatedDate]) as maxdate
from CitrixMonitoring.LoadIndex group by MachineId) as [loadvalues] on m.id = loadvalues.MachineId
where dg.name like 'live - call center desktop'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...