Partager via


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 de telle sorte qu’elle ne retourne rien, sauf s’il y a eu au moins 5 événements HAVE au cours des 30 dernières secondes INTERVAL.

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 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 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 tout 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 seul événement 300 secondes après le premier événement reçu par WMI. En outre, la requête demande que le __AggregateEvent instance ne doit être remis que si WMI reçoit plus de cinq événements de courrier électronique 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 (soit 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 Win32_NTLogEvent reçus de la même source dépasse 25. N’oubliez pas que l’opérateur ISA fait en sorte que la propriété TargetInstance de la classe système __InstanceCreationEvent représente un instance de la classe Win32_NTLogEvent.

SELECT * FROM __InstanceCreationEvent 
  WHERE TargetInstance ISA "Win32_NTLogEvent" 
  GROUP WITHIN 600 BY TargetInstance.SourceName
  HAVING NumberOfEvents > 25