KQL查询问题:如何获取首个结案侦探ID以统计最高赏金?
解决Kusto中关联首个结案侦探ID的问题
要获取每个案件首个结案的侦探ID,你可以用arg_min()函数替代单纯的min()聚合——这个函数能返回每组(按CaseId分组)中Timestamp最小的那一行的完整数据,自然就能拿到对应的DetectiveId,同时保证每个CaseId只保留一条记录。
修改后的完整查询如下:
DetectiveCases | where EventType == 'CaseOpened' | project CaseOpened = Timestamp, CaseId, Bounty = toreal(Properties.Bounty) | join kind=innerunique ( DetectiveCases | where EventType == 'CaseSolved' | summarize FirstClosed=min(Timestamp), WinningDetective=arg_min(Timestamp, DetectiveId).DetectiveId by CaseId ) on CaseId | summarize TotalBounty=sum(Bounty) by WinningDetective | sort by TotalBounty desc
关键说明:
arg_min(Timestamp, DetectiveId)会按CaseId分组,找到每组中Timestamp最小的条目,并返回该条目的Timestamp和DetectiveId,通过.DetectiveId提取出对应的侦探ID。- 这样子查询返回的结果中每个CaseId唯一,关联后不会出现重复的案件记录,确保只有首个结案的侦探能获得对应案件的赏金。
- 最后按侦探ID汇总总赏金并降序排序,就能得到赏金最高的侦探。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

