Udostępnij za pośrednictwem


GROUP, klauzula

Klauzula GROUP powoduje wygenerowanie pojedynczego powiadomienia w usłudze WMI w celu reprezentowania grupy zdarzeń. Reprezentatywne powiadomienie jest wystąpieniem klasy systemu __AggregateEvent. Klasa systemowa __AggregateEvent zawiera dwie właściwości: Przedstawiciel i NumberOfEvents. Właściwość Przedstawiciel jest obiektem osadzonym zawierającym jedno z wystąpień odebranych w interwale grupowania określonym w klauzuli WITHIN. Jeśli na przykład zdarzenie zagregowane jest generowane w celu powiadomienia o zdarzeniach modyfikacji wystąpienia, Przedstawiciel zawiera jedno wystąpienie klasy __InstanceModificationEvent. Właściwość NumberOfEvents zawiera liczbę zdarzeń odebranych w interwale grupowania. Interwał grupowania określa okres, po otrzymaniu zdarzenia początkowego, podczas którego usługa WMI powinna zbierać podobne zdarzenia.

Klauzula GROUP musi zawierać klauzulę WITHIN, aby określić interwał grupowania i może zawierać słowo kluczowe BY lub HAVING albo oba. Klauzula GROUP jest umieszczana po klauzuli WHERE, jak pokazano poniżej:

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

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ą, która reprezentuje interwał grupowania po otrzymaniu pierwszego zdarzenia. Liczba całkowita bez znaku jest liczbą sekund. 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; i liczba całkowita jest niepodpisaną 32-bitową liczbą całkowitą wskazującą liczbę zdarzeń.

W przypadku używania klauzuli GROUP klauzula WHERE, BY i HAVING są opcjonalne.

Podstawowe użycie klauzuli GROUP może zażądać grupowania zdarzeń w przedziale czasu, który rozpoczyna się po odebraniu pierwszego zdarzenia. Na przykład następujące zapytanie grupuje wszystkie zdarzenia poczty e-mail wysłane w ciągu 5 minut. Zamiast stronicowania użytkownika za każdym razem, gdy zostanie odebrana nowa wiadomość e-mail, użytkownik stały może użyć tego zapytania, aby poinformować użytkownika tylko wtedy, gdy w ciągu ostatnich 5 minut otrzymano nową wiadomość e-mail.

SELECT * FROM EmailEvent GROUP WITHIN 300

Jeśli wymagane są bardziej szczegółowe informacje, zdarzenia mogą być pogrupowane według co najmniej jednej właściwości klasy zdarzeń. Następujące zapytanie żąda, aby zdarzenia e-mail zostały połączone z innymi zdarzeniami, które mają tę samą wartość we właściwości Sender:

SELECT * FROM EmailEvent GROUP WITHIN 300 BY Sender

Jeszcze większy poziom szczegółowości można osiągnąć, dodając klauzulę WHERE. Na przykład następujące zapytanie powiadamia użytkownika o nowej wiadomości e-mail od określonego nadawcy, który dotarł w ciągu ostatnich 10 minut, w połączeniu z innymi zdarzeniami, które mają tę samą wartość we właściwości Ważność:

SELECT * FROM EventClass WHERE Sender = "MyBoss" 
  GROUP WITHIN 300 BY Importance