表结构如下
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 哪就是对的

解决方案 »

  1.   

    我可能明白你的意思,也写了个语句,但结果似乎有点不同:select a.serial_no,a.value
    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 行受影响)