Cláusula HAVING
La cláusula HAVING se usa para filtrar los eventos que se reciben durante el intervalo de agrupación especificado en la cláusula WITHIN. Por ejemplo, se podría construir una instrucción SELECT para que no devuelva nada a menos que HAYA al menos 5 eventos dentro del último INTERVALO de 30 segundos.
La cláusula WITHIN sigue inmediatamente en la instrucción SELECT después de la cláusula GROUP. La cláusula HAVING opera en la propiedad NumberOfEvents de la clase del sistema __AggregateEvent, de la que es miembro el grupo creado por la cláusula GROUP. La cláusula HAVING puede usar todos los operadores relacionales estándar.
La sintaxis es la siguiente:
SELECT * FROM EventClass [WHERE property = value]
GROUP WITHIN interval [BY property_list]
HAVING NumberOfEvents operator constant
El valor EventClass es la clase de evento de la que el evento es miembro y value es el valor de la propiedad sobre la que se necesita notificación. El intervalo es un entero sin signo que representa el intervalo de agrupación (en segundos) después de recibir el primer evento. La lista de propiedades es una lista delimitada por comas de una o varias propiedades que se incluyen en la clase de eventos. El operador es cualquier operador relacional. El valor constante es cualquier entero de 32 bits sin signo que indique el número de eventos usados para el filtrado.
Al usar la cláusula HAVING, las cláusulas WHERE y BY son opcionales.
La siguiente consulta de eventos solicita que las notificaciones de la clase EmailEvent se agrupen en un evento 300 segundos después del primer evento que WMI recibe. Además, la consulta solicita que la instancia __AggregateEvent solo se debe entregar si WMI recibe más de cinco eventos de correo electrónico en 300 segundos.
SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5
En el ejemplo siguiente se agrupan todos los eventos recibidos en 600 segundos (es decir, 10 minutos) por la propiedad TargetInstance.Propiedad SourceName. En este ejemplo, los eventos agregados solo se entregan si el número de eventos Win32_NTLogEvent recibidos del mismo origen supera los 25. Tenga en cuenta que el operador ISA hace que la propiedad TargetInstance de la clase del sistema __InstanceCreationEvent represente una instancia de la clase Win32_NTLogEvent.
SELECT * FROM __InstanceCreationEvent
WHERE TargetInstance ISA "Win32_NTLogEvent"
GROUP WITHIN 600 BY TargetInstance.SourceName
HAVING NumberOfEvents > 25