首页 > 解决方案 > Kusto 查询记录之间的时间差

问题描述

我正在寻找一种方法来查询按操作 id 分组的两条记录之间的时间差(以秒为单位)。当给出这个样本数据时:

datatable(timestamp:datetime, operation_id:string)
[
    datetime(15-7-2021 12:45:37), 'abc',    
    datetime(15-7-2021 12:45:39), 'abc',    
    datetime(15-7-2021 13:29:12), 'def',   
    datetime(15-7-2021 13:29:14), 'def',  
    datetime(15-7-2021 13:29:17), 'def',    
    datetime(15-7-2021 13:29:23), 'def',   
]

预期的输出将是:

operation_id 差异
美国广播公司 2
定义 2
定义 3
定义 6

这可能吗?

Ps 它类似于这个问题,但我不想要最小值和最大值之间的差异,而是每条记录

标签: kql

解决方案


您可以订购表格,然后使用以下prev()功能:

datatable(ts:datetime, op_id:string)
[
    datetime(07-15-2021 12:45:37), 'abc',
    datetime(07-15-2021 12:45:39), 'abc',
    datetime(07-15-2021 13:29:12), 'def',
    datetime(07-15-2021 13:29:14), 'def',
    datetime(07-15-2021 13:29:17), 'def',
    datetime(07-15-2021 13:29:23), 'def',
]
| order by op_id asc, ts asc
| extend prev_ts = prev(ts), prev_op_id = prev(op_id)
| project op_id, diff = case(prev_op_id == op_id, (ts - prev_ts)/1s, double(null))
| where isnotnull(diff)
op_id 差异
美国广播公司 2
定义 2
定义 3
定义 6

推荐阅读