表结构如下
Serial_No value
1 0.7
2 0.5
3 2.3
4 2.28
5 2.2
6 0.5
7 0.4
8 0.45
9 1.1 //数据漂浮
10 0.3
11 0. 35这是一个油表的电压值表,value是电压值,serial_no 是递增列, 我想利用电压表模拟加油,本来只需要两两的差价大于1就可以判断是否加油, 但是有时候传感器会突然出现一个漂移数据, 这样就不是很准确了,我想先按两两相行的差价大于1的先判断出来,然后再通过得出来的表,去跟后面的三行平均数取绝对值,这样取出来的数据应该是比较可靠的,请问这个怎么写,不知道高手明白我的意思了没有像上面的数据应该正确的结果是
serial_no value
3 2.3
5 2.2
//9
突然变成了0.5 像这种情况,我的意思是5 是先判断出来了,通过这一行,与 678 这三行的平均取差价,如果还是大于1 哪就是对的
Serial_No value
1 0.7
2 0.5
3 2.3
4 2.28
5 2.2
6 0.5
7 0.4
8 0.45
9 1.1 //数据漂浮
10 0.3
11 0. 35这是一个油表的电压值表,value是电压值,serial_no 是递增列, 我想利用电压表模拟加油,本来只需要两两的差价大于1就可以判断是否加油, 但是有时候传感器会突然出现一个漂移数据, 这样就不是很准确了,我想先按两两相行的差价大于1的先判断出来,然后再通过得出来的表,去跟后面的三行平均数取绝对值,这样取出来的数据应该是比较可靠的,请问这个怎么写,不知道高手明白我的意思了没有像上面的数据应该正确的结果是
serial_no value
3 2.3
5 2.2
//9
突然变成了0.5 像这种情况,我的意思是5 是先判断出来了,通过这一行,与 678 这三行的平均取差价,如果还是大于1 哪就是对的
from tb a
join
(
select a.serial_no, avg(b.value) as avgvalue
from tb a
join tb b on b.serial_no >= a.serial_no+1 and b.serial_no <= a.serial_no+3
group by a.serial_no
) b on a.serial_no = b.serial_no
where abs(a.value - b.avgvalue) > 1serial_no value
----------- ---------------------------------------
2 0.50
4 2.28
5 2.20
(3 行受影响)