Udostępnij za pośrednictwem


HAVING, klauzula

Klauzula HAVING służy do filtrowania zdarzeń, które są odbierane w interwale grupowania określonym w klauzuli WITHIN. Na przykład można skonstruować instrukcję SELECT, aby nie zwracała niczego, chyba że w ciągu ostatnich 30 sekund INTERWAŁ wystąpiło co najmniej 5 zdarzeń.

Klauzula WITHIN następuje natychmiast w instrukcji SELECT po klauzuli GROUP. Klauzula HAVING działa na właściwości NumberOfEvents klasy systemowej __AggregateEvent, której grupa utworzona przez klauzulę GROUP jest elementem członkowskim. Klauzula HAVING może używać wszystkich standardowych operatorów relacyjnych.

Składnia jest następująca:

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

Wartość EventClass jest klasą zdarzeń, której zdarzenie jest elementem członkowskim, a wartość jest wartością właściwości, dla której wymagane jest powiadomienie. Interwał jest niepodpisaną liczbą całkowitą reprezentującą interwał grupowania (w sekundach) po otrzymaniu pierwszego zdarzenia. Lista właściwości to rozdzielana przecinkami lista co najmniej jednej właściwości uwzględnionej w klasie zdarzeń. Operator jest dowolnym operatorem relacyjnym. Stała wartość jest dowolną niepodpisaną 32-bitową liczbą całkowitą wskazującą liczbę zdarzeń używanych do filtrowania.

W przypadku używania klauzuli HAVING klauzule WHERE i BY są opcjonalne.

Następujące zapytanie o zdarzenie żąda, aby powiadomienia klasy EmailEvent zostały zgrupowane w jedno zdarzenie 300 sekund po pierwszym zdarzeniu odbieranym przez usługę WMI. Ponadto zapytanie żąda __AggregateEvent wystąpienia powinno być dostarczane tylko wtedy, gdy usługa WMI odbiera więcej niż pięć zdarzeń poczty e-mail w ciągu tych 300 sekund.

SELECT * FROM EmailEvent GROUP WITHIN 300 HAVING NumberOfEvents > 5

Poniższy przykład grupuje wszystkie zdarzenia odebrane w ciągu 600 sekund (czyli 10 minut) przez TargetInstance. właściwośćSourceName. W tym przykładzie zdarzenia agregacji są dostarczane tylko wtedy, gdy liczba zdarzeń Win32_NTLogEvent odebranych z tego samego źródła przekracza 25. Należy pamiętać, że operator ISA powoduje, że właściwość TargetInstance klasy systemowej __InstanceCreationEvent reprezentuje wystąpienie klasy Win32_NTLogEvent.

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