Предложение 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