示例代码如下:
t = table(0 0 0 1 1 1 0 0 as value, 2022.01.01 12:00:00 + 1..8 as time, take(1, 8) as id) select * from t where id = 1, (value != prev(value) and isValid(prev(value))) or (value != next(value) and isValid(next(value))) context by id
示例代码如下:
t = table(0 0 0 1 1 1 0 0 as value, 2022.01.01 12:00:00 + 1..8 as time, take(1, 8) as id) select * from t where id = 1, (value != prev(value) and isValid(prev(value))) or (value != next(value) and isValid(next(value))) context by id
如果需要按分组实现的话,建议用context by和having,示例代码如下:
t = table(0 0 0 1 1 1 0 0 1 1 0 0 1 2 as value, 2022.01.01 12:00:00 + 1..14 as time, take(1, 8) join take(2, 6) as id) select * from t context by id having (value != prev(value) and isValid(prev(value))) or (value != next(value) and isValid(next(value)))
关于context by用法的说明:
context by和having组合使用时,先进行context分组然后在组内计算having的逻辑;
若是楼上where和context by的写法,会先对全部数据进行where判断再分组。