如何使用Kusto返回表中max()对应行,同时展示未参与max分组的其他列
最优解决方案:使用arg_max聚合函数
你不需要额外做join或者in查询,KQL内置的arg_max()聚合可以直接满足需求:按指定字段分组后,取分组内某列最大值对应的整行所有数据,语法如下:
SigninLogs | where ResultType == 0 | summarize arg_max(TimeGenerated, *) by UserPrincipalName
参数说明:
- 第一个参数
TimeGenerated:指定用来取最大值的基准列 - 第二个参数
*:表示返回最大值对应行的所有列,你也可以换成指定列名,比如arg_max(TimeGenerated, AppDisplayName, ClientAppUsed, Location)仅返回需要的列 - 最后
by UserPrincipalName:指定分组维度,和你原查询的逻辑完全一致
多列关联join补充方案
如果有特殊场景必须用你原有的聚合结果关联回原表,KQL的join是支持多列关联的,不需要局限于单列关联,示例如下:
// 先生成每个用户最新成功登录的聚合结果 let latest_signin = SigninLogs | where ResultType == 0 | summarize max_login_time = max(TimeGenerated) by UserPrincipalName; // 用用户主体名+登录时间双字段关联回原表取全量字段 latest_signin | join kind=inner (SigninLogs | where ResultType == 0) on $left.UserPrincipalName == $right.UserPrincipalName, $left.max_login_time == $right.TimeGenerated
内容的提问来源于stack exchange,提问作者AdamC
相关产品推荐
相关产品推荐

