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 pour ne retourner rien, sauf si au moins 5 événements se sont écoulés au cours du dernier intervalle de 30 secondes.
La clause WITHIN suit immédiatement dans 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 un 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 value 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 la réception du premier événement. La liste de propriétés est une liste délimitée par des virgules d’une ou de plusieurs propriétés incluses dans la classe d’événements. L’opérateur est un opérateur relationnel. La valeur de constante est un entier 32 bits non signé qui indique le nombre d’événements utilisés pour le filtrage.
Lors de l’utilisation de 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 de 300 secondes après le premier événement reçu par WMI. En outre, la requête demande l’instance _ _ AggregateEvent doit être remise uniquement si WMI reçoit plus de cinq événements de messagerie en 300 secondes.
SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5
L’exemple suivant regroupe tous les événements reçus en 600 secondes (c’est-à-dire 10 minutes) par TargetInstance. Propriété SourceName . Dans cet exemple, les événements d’agrégation sont remis uniquement si le nombre d’événements _ NTLogEvent Win32 reçus de la même source dépasse 25. Gardez à l’esprit que l’opérateur ISA fait en sorte que la propriété TargetInstance de la classe système _ _ InstanceCreationEvent représente une instance de la classe Win32 _ NTLogEvent .
SELECT * FROM __InstanceCreationEvent
WHERE TargetInstance ISA "Win32_NTLogEvent"
GROUP WITHIN 600 BY TargetInstance.SourceName
HAVING NumberOfEvents > 25