interval 输出值不符合 预期

t=table(2021.01.01T01:00:00+(1..5 join 9..11) as time, take(`CLF1,8) as contract, 50..57 as price)
select last(contract) as contract, last(price) as price from t group by interval(time, 2s,"prev")

attachments-2023-07-uBqEIFpP64af512bd89c3.png

我预期的输出值应该是 expect输入应该是:00:00--> NAN, 00:02-->51, 00:04-->53, 00:06-->54, 00:08-->54, 00:10-->56,但看起来窗口是从 00:00开始的,而不是 00:01,我应该怎么写才能达到预期?

请先 登录 后评论

1 个回答

veryOrdinary

若不指定 origin, interval 的起始值是规整后的起始值,规整规则为第一个能被 指定的起始时间 t1 前第一个能被 step 整除的 t0 值,在该例子中,step 未设置默认与 duration 相同,有因此 t0 为 00:00 这个时间点,因此第一个窗口为 00:00 00:01, 第二个窗口为 00:02 00:03...以此类推,取每个窗口的 last 结果是符合预期的。

根据您的预期结果反推,您希望的计算需求是 00:01 00:02 为一个窗口,00:03 00:04 为一个窗口...,脚本可以修改为:

t=table(2021.01.01T01:00:00+(1..5 join 9..11) as time, take(`CLF1,8) as contract, 50..57 as price)
select last(contract) as contract, last(price) as price from t group by interval(time, 2s,"prev", closed='right', label='right')

attachments-2023-07-SQADRpNq64af54180b789.jpg如果不要求输出上述 label 只是确保窗口划分是正确的,可以指定 orgin='start' 确保窗口从第一条数据开始,这是一个更通用的方法,不会受规整的影响。

t=table(2021.01.01T01:00:00+(1..5 join 9..11) as time, take(`CLF1,8) as contract, 50..57 as price)
select last(contract) as contract, last(price) as price from t group by interval(time, 2s,"prev", origin='start')

attachments-2023-07-mM5j6ax564af548cecab3.jpg

请先 登录 后评论