按列的值是否大于阈值滑动分组,如何得到每个分组的第一行记录

请教下这个有没有办法实现, 当v连续>=某个值a时,保留该连续期间最大值的第一行记录,如果不是连续>=某值a,则也保留该行记录:

表内容示例如下,比如当a为0.3时,希望结果是保留箭头所指记录:

attachments-2021-11-4FYigkok61976853cfe24.png如果连续>=a的记录行数为1,则也保留该行记录,是不是只能用循环来做了?

请先 登录 后评论

1 个回答

wale

跟序列相关的分组可以使用segment函数

select * from t context by segment(v >= 0.3) having v >=0.3 and v=max(v) limit 1

注意:context by与limit一起使用能够获取表中每个分组前n条记录或最后n条记录。如果limit后面为正数,表示取前n条记录;如果limit后面为负数,表示取最后n条记录。如下图所示,同个组2021.10.04和2021.10.06所在行的值都是0.5,limit 1 就取了2021.10.04这一行,若改为limit -1,则会取2021.10.06那一行。

attachments-2021-11-uWv4LDwd619e39f0196a5.png

请先 登录 后评论