如何在Azure Monitor KQL中按列分组计算两行差值
在Azure Log Analytics中用KQL批量计算多主机的数值差值
要批量计算所有主机的数值差值,核心是用partition by子句将数据按Hostname分组,确保prev()函数只在同一主机的范围内取上一条时间的数值,具体实现如下:
完整KQL查询
// 替换为你的实际表名 YourTableName | sort by Hostname, TimeGenerated asc | partition by Hostname ( extend Difference = coalesce(Value - prev(Value), double(0)) ) | where Difference != 0 | project TimeGenerated, Hostname, Difference
逻辑说明
- 排序分组:先按
Hostname和TimeGenerated升序排序,保证同一主机的记录按时间顺序排列 - 分组计算差值:通过
partition by Hostname限定prev()的作用范围,仅在当前主机的历史记录中取上一条数值计算差值 - 过滤无效行:排除无前置记录的初始行(差值为0的行),只保留有效差值结果
结果验证
针对你提供的示例数据,执行上述查询后会得到预期结果:
| TimeGenerated | Hostname | Difference |
|---|---|---|
| 2024-01-01T00:10:00 | host01 | 2 |
| 2024-01-01T00:10:00 | host02 | 4 |
| 2024-01-01T00:10:00 | host03 | 5 |
内容的提问来源于stack exchange,提问作者teru
相关产品推荐
相关产品推荐

