HAVING Clause
La clause HAVING est utilisée pour filtrer les événements reçus pendant l’intervalle de regroupement spécifié dans la clause WITHIN. Par exemple, une instruction SELECT peut être construite afin qu’elle ne retourne rien, sauf s’il y a eu au moins 5 événements au cours des 30 dernières secondes INTERVAL.
La clause WITHIN suit immédiatement l’instruction SELECT après la clause GROUP. La clause HAVING fonctionne sur la propriété NumberOfEvents de la classe système __AggregateEvent, dont le groupe créé par la clause GROUP est membre. La clause HAVING peut utiliser tous les opérateurs relationnels standard.
La syntaxe est la suivante :
SELECT * FROM EventClass [WHERE property = value]
GROUP WITHIN interval [BY property_list]
HAVING NumberOfEvents operator constant
La valeur EventClass est la classe d’événements dont l’événement est membre, et valeur est la valeur de la propriété sur laquelle la notification est requise. L’intervalle est un entier non signé qui représente l’intervalle de regroupement (en secondes) après avoir reçu le premier événement. La liste des propriétés est une liste délimitée par des virgules d’une ou plusieurs propriétés incluses dans la classe d’événements. L’opérateur est n’importe quel opérateur relationnel. La valeur constante est n’importe quel entier 32 bits non signé indiquant le nombre d’événements utilisés pour le filtrage.
Lorsque vous utilisez la clause HAVING, les clauses WHERE et BY sont facultatives.
La requête d’événement suivante demande que les notifications de la classe EmailEvent soient regroupées en un événement 300 secondes après le premier événement reçu par WMI. En outre, la requête demande l’instance de __AggregateEvent doit être remise uniquement si WMI reçoit plus de cinq événements de messagerie dans ces 300 secondes.
SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5
L’exemple suivant regroupe tous les événements reçus en 600 secondes (autrement dit, 10 minutes) par la TargetInstance. propriétéSourceName. Dans cet exemple, les événements d’agrégation sont remis uniquement si le nombre d’événements Win32_NTLogEvent reçus à partir de la même source dépasse 25. N’oubliez pas que l’opérateur ISA entraîne la propriété TargetInstance de la classe système __InstanceCreationEvent pour représenter une instance de la classe Win32_NTLogEvent.
SELECT * FROM __InstanceCreationEvent
WHERE TargetInstance ISA "Win32_NTLogEvent"
GROUP WITHIN 600 BY TargetInstance.SourceName
HAVING NumberOfEvents > 25