You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于KQL计算设备工作时长及获取当前状态的问题

KQL计算设备工作时长并获取当前状态解决方案

问题分析

现有查询因仅过滤状态切换记录、未保留设备最新状态记录,导致arg_max只能返回True,无法获取设备当前实际状态。

解决方案思路

  1. 筛选所有状态切换的记录(当前行状态与上一行不同),同时保留每个设备的最新一条记录(无论状态是否切换);
  2. 基于状态切换记录计算设备运行时段的时长;
  3. 单独提取每个设备的最新状态,与时长结果关联。

具体KQL代码

test
| order by Id, Timestamp asc
// 对比当前行与上一行的状态
| extend prev_Value = prev(Value)
// 保留状态切换记录或设备的第一条记录
| where prev_Value != Value or prev_Value is null
// 追加每个设备的最新记录,确保当前状态被保留
| union (
    test
    | summarize arg_max(Timestamp, *) by Id
)
| order by Id, Timestamp asc
// 获取下一条记录的时间和状态,用于计算运行时长
| extend next_Timestamp = next(Timestamp), next_Value = next(Value)
// 仅计算从运行(True)到停机(False)的时段时长
| where Value == true and next_Value == false
| project Id, 运行开始时间=Timestamp, 运行结束时间=next_Timestamp, 工作时长=next_Timestamp - Timestamp
// 关联设备当前状态
| join kind=leftouter (
    test
    | summarize 当前时间=arg_max(Timestamp, *).Timestamp, 当前状态=arg_max(Timestamp, *).Value by Id
) on Id

代码说明

  • prev(Value):识别状态切换节点,筛选出真正的状态变化记录;
  • union追加最新记录:确保设备当前处于运行/停机状态时,该状态能被捕获;
  • next(Timestamp):匹配运行状态对应的下一个停机时间,准确计算单次工作时长;
  • 最后通过join关联最新状态查询结果,解决原查询无法获取当前状态的问题。

内容的提问来源于stack exchange,提问作者z3nth10n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:45:46