如何修改Kusto查询以展示每个Id的最新数据?
解决Kusto查询中重复Id仅保留最新数据的问题
要让查询仅展示每个Id的最新数据,核心逻辑是按Id分组后,保留每组中时间戳最晚的记录。以下是两种常用的修改方案:
方案一:使用partition by + top
这种写法逻辑直观,按Id拆分数据集后,每组取最新的一条记录:
customEvents | where name == "Tracker" | project Id = tostring(customDimensions["Id"]), Rank = tostring(customDimensions["Rank"]), EventTimestamp = timestamp // 保留事件时间戳用于判断新旧 | partition by Id ( top 1 by EventTimestamp desc // 每组取时间戳最大的第一条数据 )
方案二:使用summarize + arg_max
这种写法更简洁,通过聚合函数直接提取每个Id对应的最新记录:
customEvents | where name == "Tracker" | extend Id = tostring(customDimensions["Id"]), Rank = tostring(customDimensions["Rank"]) | summarize arg_max(timestamp, *) by Id // 按Id分组,取timestamp最大的那条记录的所有字段 | project Id, Rank // 只保留需要的列
说明
timestamp是customEvents表默认的时间字段,用于判断记录的新旧;如果你的表中用的是其他时间字段,替换成对应字段名即可。- 两种方案都能实现需求,
arg_max的写法在大数据量下性能更优。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

