Поделиться через


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

Предложение HAVING используется для фильтрации событий, полученных во время интервала группировки, указанного в предложении IN. Например, инструкцию SELECT можно создать так, чтобы она не возвращала ничего, если не было не менее 5 событий в течение последних 30 секунд интервала.

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

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

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

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

При использовании предложения 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