summarize 演算子を使用して結果をフィルター処理する

完了

arg_max() および arg_min() 関数で、上位と下位の行をそれぞれフィルターで除外します。

arg_max 関数

次のステートメントでは、SQL10.NA.contosohotels.com コンピューターの SecurityEvent テーブルから最新の行が返されます。 arg_max 関数の * で、その行のすべての列を要求します。

SecurityEvent 
| where Computer == "SQL10.na.contosohotels.com"
| summarize arg_max(TimeGenerated,*) by Computer

arg_min 関数

このステートメントでは、SQL10.NA.contosohotels.com コンピューターの最も古い SecurityEvent が結果セットとして返されます。

SecurityEvent 
| where Computer == "SQL10.na.contosohotels.com"
| summarize arg_min(TimeGenerated,*) by Computer

結果パイプの再考

順序結果でパイプ文字の問題がパススルーされています。 次の 2 つの KQL ステートメントを確認します。 結果セットの違いは何ですか?

各クエリを個別に実行して、結果を確認します。

// Statement 1

SecurityEvent
| summarize arg_max(TimeGenerated, *) by Account
| where EventID == "4624"

// Statement 2

SecurityEvent
| where EventID == "4624"
| summarize arg_max(TimeGenerated, *) by Account

Statement 1 には、最後のアクティビティがログオンだった Account が含まれます。

SecurityEvent テーブルが集計され、各 Account の最新の行が返されます。 その後、EventID が 4624 (ログオン) に等しい行のみが返されます。

Statement 2 には、ログオンしている Account の最新のログインが含まれます。

SecurityEvent テーブルは、EventID = 4624 のみを含むようにフィルター処理されます。 これらの結果は、Account ごとに最新のログオン行に対して集計されます。