请教一个数据查询问题(连续一段时间大于某个值),希望大家能够提供方法
数据表中有时间和数据值两列,
现在需要查询连续大于等于3分钟大于某个值(从大于某个值开始一直到小于该值结束)的数据,
并计算出连续时间,和该段时间的平均值。如何通过SQL语句实现该要求。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
数据表中有时间和数据值两列,
现在需要查询连续大于等于3分钟大于某个值(从大于某个值开始一直到小于该值结束)的数据,
并计算出连续时间,和该段时间的平均值。如何通过SQL语句实现该要求。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
简单做了个测试,希望对你有帮助。
创建表和测试数据
查询语句,假设时间字段没有重复值结果才会正确:
大概分三个步骤:
先按照时间字段排序,计算出每个连续大于等于目标值分组的第一行记录(判断标准是当前行大于等于目标值,同时下一行小于目标值,下面sql语句t表内容)
计算上面分组的日期范围计算出来(下面sql语句中t2的内容),并过滤连续时间超过3分钟,形成表t3
然后将数据表和t3表关联,就可以得到连续大于目标值的行分组。
用阿里巴巴今年以来的股价
t_log
做例子,求连续4天以上股价大于$102的区间。f_time
f_val
Postgresql代码:
flip_time
:阈值(102)区间段开始或结束的时点。通过窗口函数lag()
和lead()
比较前后两行是否跨越阈值取得。duration
:flip_time
中一定是“开始-结束”的循环,利用此特性进一步加工出把开始和结束时点放在同一行,且长度符合要求(4天)的行。duration
和t_log
联接可计算出持续时间和平均值。运行结果是:
t_start
t_end
duration
mean