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


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

Предложение GROUP приводит к тому, что WMI создает одно уведомление, представляющее группу событий. Репрезентативное уведомление является экземпляром системного класса __AggregateEvent . Системный класс __AggregateEvent содержит два свойства: Representative и NumberOfEvents. Свойство Representative — это внедренный объект, содержащий один из экземпляров, полученных в течение интервала группирования, указанного в предложении WITHIN. Например, если агрегатное событие создается для уведомления о событиях изменения экземпляра, То Представитель содержит один экземпляр класса __InstanceModificationEvent . Свойство NumberOfEvents содержит количество событий, полученных в течение интервала группировки. Интервал группировки указывает период времени после получения начального события, в течение которого WMI должен собирать аналогичные события.

Предложение GROUP должно содержать предложение WITHIN для указания интервала группировки и может содержать ключевое слово BY, HAVING или и то, и другое. Предложение GROUP помещается после предложения WHERE, как показано ниже:

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

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

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

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

SELECT * FROM EmailEvent GROUP WITHIN 300

Если требуются более подробные сведения, события можно сгруппировать по одному или нескольким свойствам класса событий. Следующий запрос запрашивает объединение событий электронной почты с другими событиями, имеющими то же значение в свойстве Sender :

SELECT * FROM EmailEvent GROUP WITHIN 300 BY Sender

Более подробный уровень детализации можно достичь, добавив предложение WHERE. Например, следующий запрос уведомляет пользователя о новом сообщении электронной почты от определенного отправителя, который прибыл в течение последних 10 минут, в сочетании с другими событиями, имеющими то же значение в свойстве Importance :

SELECT * FROM EventClass WHERE Sender = "MyBoss" 
  GROUP WITHIN 300 BY Importance