如何在KQL查询中筛选保留数据集中最新时间对应的所有行
KQL 保留数据集中最新时间对应所有行的实现方案
以下是两种可直接落地的实现方式,均能返回你示例中Kate、Aria对应的两条最新记录:
方法1:全局最大时间匹配(性能最优,推荐)
先计算整个数据集的最大时间戳,再过滤匹配该时间的所有行,不需要全表排序,大表查询效率更高:
// 假设你的源表名为T,可替换为实际表名/结果集 let max_ingestion_time = toscalar(T | summarize max(['Ingestion DateTime'])); T | where ['Ingestion DateTime'] == max_ingestion_time
说明:
toscalar()函数会将聚合得到的最大时间转为单值标量,供后续过滤逻辑直接调用- 不会修改源数据的列结构,返回结果和原表字段完全一致
方法2:排序后按排名过滤(符合排序+过滤的需求)
先按时间倒序排序,再对时间做排名,仅保留排名为1(即最新时间)的行:
T // 按 ingestion 时间倒序排序 | order by ['Ingestion DateTime'] desc // 对时间列做全局排名,时间相同则排名一致 | extend time_rank = rank() over(order by ['Ingestion DateTime'] desc) // 仅保留最新时间对应的行 | where time_rank == 1 // 清理辅助生成的排名列 | project-away time_rank
说明:
- 如果需要同时查看所有数据的时间排序情况,可直接注释掉最后两行过滤逻辑查看完整排序结果
rank()函数会给相同时间的行分配相同排名,完美适配保留所有最新时间行的需求
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

