Cláusula GROUP

A cláusula GROUP faz com que o WMI gere uma única notificação para representar um grupo de eventos. A notificação representativa é uma instância da classe do sistema __AggregateEvent. A classe do sistema __AggregateEvent contém duas propriedades: Representative e NumberOfEvents. A propriedade Representative é um objeto inserido que contém uma das instâncias recebidas durante o intervalo de agrupamento especificado na cláusula WITHIN. Por exemplo, se um evento de agregação for gerado para notificar sobre eventos de modificação de instância, a Representative conterá uma instância da classe __InstanceModificationEvent. A propriedade NumberOfEvents contém o número de eventos recebidos durante o intervalo de agrupamento. O intervalo de agrupamento especifica o período de tempo, após o recebimento de um evento inicial, durante o qual o WMI deverá coletar eventos semelhantes.

A cláusula GROUP deve conter uma cláusula WITHIN para especificar o intervalo de agrupamento e pode conter o palavra-chave BY ou HAVING, ou ambas. A cláusula GROUP é colocada após a cláusula WHERE, conforme mostrado a seguir:

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

O valor EventClass é a classe de evento da qual o evento é um membro e value é o valor da propriedade na qual a notificação é necessária. O intervalo é um inteiro sem sinal que representa o intervalo de agrupamento após receber o primeiro evento. O inteiro sem sinal é um número de segundos. A lista de propriedades é uma lista delimitada por vírgulas de uma ou mais propriedades incluídas na classe de evento; operator é qualquer operador relacional; e integer é um inteiro sem sinal de 32 bits que indica um número eventos.

Ao usar a cláusula GROUP, as cláusulas WHERE, BY e HAVING são opcionais.

Um uso básico da cláusula GROUP pode solicitar um agrupamento de eventos dentro de um intervalo de tempo que começa quando o primeiro evento é recebido. Por exemplo, a consulta a seguir agrupa todos os eventos de email enviados dentro de 5 minutos. Em vez de paginar um usuário sempre que um novo email for recebido, o consumidor permanente poderá usar essa consulta para informar o usuário somente se novos emails tiverem sido recebidos nos últimos 5 minutos.

SELECT * FROM EmailEvent GROUP WITHIN 300

Se forem necessárias informações mais detalhadas, os eventos poderão ser agrupados por uma ou mais propriedades da classe de evento. A consulta a seguir solicita que os eventos de email sejam combinados com outros eventos que tenham o mesmo valor na propriedade Sender:

SELECT * FROM EmailEvent GROUP WITHIN 300 BY Sender

Um nível ainda maior de detalhes pode ser obtido adicionando uma cláusula WHERE. Por exemplo, a consulta a seguir notifica um usuário sobre um novo email de um remetente específico que chegou nos últimos 10 minutos, combinada com outros eventos que têm o mesmo valor na propriedade Importance:

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