kql - 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 它类似于这个问题,但我不想要最小值和最大值之间的差异,而是每条记录
解决方案
您可以订购表格,然后使用以下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 |