KQL,同一个表中不同行之间的时间差

Kub*_*a K 5 kql azure-data-explorer

我有Sessions桌子

Sessions
|Timespan|Name |No|
|12:00:00|Start|1 |
|12:01:00|End  |2 |
|12:02:00|Start|3 |
|12:04:00|Start|4 |
|12:04:30|Error|5 |
Run Code Online (Sandbox Code Playgroud)

我需要使用 KQL 从中提取每个会话的持续时间(但如果您能给我建议如何使用其他查询语言来做到这一点,那也会非常有帮助)。但如果后面的下一行start也是start,则意味着会话被放弃,我们应该忽略它。

预期结果:

|Duration|SessionNo|
|00:01:00|    1    |
|00:00:30|    4    |
Run Code Online (Sandbox Code Playgroud)

Tom*_*tah 9

你可以尝试这样的事情:

Sessions
| order by No asc 
| extend nextName = next(Name), nextTimestamp = next(timestamp)
| where Name == "Start" and nextName != "Start"
| project Duration = nextTimestamp - timestamp, No
Run Code Online (Sandbox Code Playgroud)

使用运算符时order by,您将获得一个序列化行集,然后您可以使用next和等运算符prev。基本上你正在寻找带有No == "Start"和 的行next(Name) == "End",所以这就是我所做的,

您可以发现此查询在Kusto Samples 打开数据库中运行。