1

我有一张包含以下记录的表

ab
cd
start
ef
gh
stop
io
start
as
stop
kl

我只希望返回“开始”和“停止”行之间的记录。记录按时间戳顺序排列。在给出的示例中,结果将是 ef、gh 和 as。

非常感谢任何帮助。我一直在为此苦苦挣扎。

4

1 回答 1

4

你可以使用scan运算符

例如:

let _start = "start";
let _stop = "stop";
datatable(dt:datetime, ab:string)
[
    datetime(2021-01-01 10:00), 'cd',
    datetime(2021-01-01 10:01), 'start',
    datetime(2021-01-01 10:02), 'ef',
    datetime(2021-01-01 10:03), 'gh',
    datetime(2021-01-01 10:04), 'stop',
    datetime(2021-01-01 10:05), 'io',
    datetime(2021-01-01 10:06), 'start',
    datetime(2021-01-01 10:07), 'as',
    datetime(2021-01-01 10:08), 'stop',
    datetime(2021-01-01 10:09), 'kl',
]
| order by dt asc
| scan with 
(
    step s1: ab == _start;
    step s2: ab !in(_start, _stop);
    step s3: ab == _stop;
)
| where ab !in(_start, _stop)
dt 抗体
2021-01-01 10:02:00.0000000 英夫
2021-01-01 10:03:00.0000000 gh
2021-01-01 10:07:00.0000000 作为

更新,根据您评论中的问题:

  • 为了包含startand stop,只需删除最后一行 ( | where ab !in(_start, _stop))
于 2022-01-24T23:18:13.923 回答