Предложение HAVING

Предложение HAVING используется для фильтрации событий, полученных в течение интервала группирования, указанного в предложении WITHIN. Например, инструкция SELECT может быть построена таким образом, чтобы она ничего не возвращала, если в течение последних 30-секундного ИНТЕРВАЛа не было по крайней мере 5 событий HAVE.

Предложение WITHIN следует сразу после предложения GROUP в инструкции SELECT. Предложение HAVING работает со свойством NumberOfEvents системного класса __AggregateEvent , членом которого является группа, созданная предложением GROUP. Предложение HAVING может использовать все стандартные реляционные операторы.

Синтаксис выглядит следующим образом:

SELECT * FROM EventClass [WHERE property = value] 
  GROUP WITHIN interval [BY property_list]
  HAVING NumberOfEvents operator constant

Значение EventClass — это класс событий, членом которого является событие, а значение — значение свойства, для которого требуется уведомление. Интервал — это целое число без знака, представляющее интервал группировки (в секундах) после получения первого события. Список свойств — это разделенный запятыми список из одного или нескольких свойств, включенных в класс событий. Оператором является любой реляционный оператор. Постоянным значением является любое 32-разрядное целое число без знака, указывающее количество событий, используемых для фильтрации.

При использовании предложения HAVING предложения WHERE и BY являются необязательными.

Следующий запрос события запрашивает группирование уведомлений класса EmailEvent в одно событие через 300 секунд после первого события, которое получает инструментарий WMI. Кроме того, запрос запрашивает экземпляр __AggregateEvent , только если WMI получает более пяти событий электронной почты за эти 300 секунд.

SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5

В следующем примере все события, полученные за 600 секунд (т. е. 10 минут), группируется объектом TargetInstance. Свойство SourceName . В этом примере статистические события доставляются, только если число Win32_NTLogEvent событий, полученных из одного источника, превышает 25. Помните, что оператор ISA приводит к тому, что свойство TargetInstance системного класса __InstanceCreationEvent представляет экземпляр класса Win32_NTLogEvent .

SELECT * FROM __InstanceCreationEvent 
  WHERE TargetInstance ISA "Win32_NTLogEvent" 
  GROUP WITHIN 600 BY TargetInstance.SourceName
  HAVING NumberOfEvents > 25