如何修改KQL查询以识别同一DeviceID的Serial字段变更记录?
KQL查询调整:筛选DeviceID对应的Serial变更记录
要实现仅展示同一DeviceID下Serial字段发生变更的记录,你可以通过窗口函数对比历史Serial值来实现,具体步骤如下:
- 保留原有数据解析与字段投影逻辑
- 按
DeviceID分组、Date排序,获取每个设备上一条记录的Serial值 - 筛选当前Serial与上一条Serial不一致的记录
修改后的完整查询
MyInventory_CL | mvexpand parse_json(Health_s) | project Date, DeviceID, ['Type'] = Health_s['Type'], ['XOLabel'] = Health_s['XOLabel'], ['Serial'] = Health_s['XOSerial Number'], ['Placement'] = Health_s['XOPlNumber'], Status // 按设备分组,按日期排序,获取上一条记录的Serial | partition by DeviceID ( order by Date asc | extend prev_Serial = prev(Serial) ) // 筛选出Serial发生变更的记录(排除无历史的第一条记录) | where isnotnull(prev_Serial) and Serial != prev_Serial
关键逻辑说明
partition by DeviceID:将数据按设备ID分组,确保仅对比同一设备的历史记录order by Date asc:保证按时间顺序获取上一条记录,避免顺序混乱导致对比错误prev(Serial):窗口函数,获取当前设备上一条(按Date排序)的Serial值where isnotnull(prev_Serial) and Serial != prev_Serial:过滤出确实发生变更的记录,排除每个设备无历史对比的第一条记录
如果你的Date字段格式存在解析问题,或需要更精确的时间排序,可以补充Date字段的具体格式信息,我再帮你调整。
内容的提问来源于stack exchange,提问作者nstech07
相关产品推荐
相关产品推荐

