4条回答 默认 最新
- weixin_42603074 2018-12-12 09:45关注
先写一个笨办法:
select a.* from (select new_time, 数值列, judge lead(judge_value, 1, 0) over(order by new_time) judge2,--用新的时间列找到下一个时间点 lead(judge_value, 2, 0) over(order by new_time) judge3--用新的时间列找到下二个时间点 from (select to_char(sysdate, 'yyyy-mm-dd') || ' ' || replace(时间列, 'D', ':') || ':00' as new_time,--重新规范了一下时间列,如果这个表里面有不止一天的数据,就不要这么转换了 数值列, sign(数值列 - 100) as judge --用SIGN函数检验是不是大于100 FROM 表名 order by to_char(sysdate, 'yyyy-mm-dd') || ' ' || replace(时间列, 'D', ':') || ':00'))--重新规范时间排序,外面的开窗函数要用的新的时间列 where judge = 1--最后在最外层判断三个是不是都是大于100的,然后取出这样的列 and judge2 = 1--由于开窗函数在本层无法作为where条件,所以放在最外层 and judge3 = 1--最后取到的时间列,往后推三个时间点就是你要的连续的三个大于100的时间点
还有一个比较高级的办法是用keep(),但是我忘了怎么用了,我去百度一下,明天再回复你,哇嘎嘎。
-------------------------我是昨天与今天的分隔符-------------------------
今天看了一下之前写的过程,发现其实不用keep()函数就可以做到,还是先上代码:
select * from (select a_time, a_value, judge, count(1) over(partition by j, judge) cnt from (select a.a_time, a.a_value, sign(a.a_value - 100) as judge, row_number() over(order by a_time) - row_number() over(partition by sign(a.a_value - 100) order by a_time) j from keep_test a)) where judge = 1 and cnt >= 3
我按照你的格式创建了一个新的测试表,并且做了测试,是没问题的。
测试表表名:keep_test
时间列:a_time
值列:a_value解决 2无用
悬赏问题
- ¥60 求一个简单的网页(标签-安全|关键词-上传)
- ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
- ¥15 基于卷积神经网络的声纹识别
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP