注册 登录
编程论坛 SQL Server论坛

SQL 异常数据处理

seven_smile 发布于 2021-06-30 17:40, 6619 次点击
数据库名称:SJK
表名称    TEXT            
时间              电表度数    水表度数 气流量计度数
2021/6/22 18:00        12    13           8
2021/6/22 19:00        30    50           20
2021/6/22 20:00        62    110           45
2021/6/22 21:00        70    122           52
2021/6/22 22:00        72    125           52
2021/6/22 23:00        74    127           60
2021/6/23 0:00        76    129           62
2021/6/23 1:00        72    133           64
2021/6/23 2:00        80    136           66
2021/6/23 3:00        82    536           68
2021/6/23 4:00        84    137           770

如上表所示:2021/6/23 1:00    178    133           64
            2021/6/23 3:00    82    536           68
            2021/6/23 4:00    84    137           770
三行数据178 536 770是存在问题的。判断方法:列的(当前数据-上一条数据)<200,且列的(当前数据-上一条数据)>0
则将上一条数据的值赋给该数据即:
            2021/6/23 1:00    76    133           64
            2021/6/23 3:00    82    136           68
            2021/6/23 4:00    84    137           68
则生产新表A如下:
时间              电表度数    水表度数 气流量计度数
2021/6/22 18:00        12    13           8
2021/6/22 19:00        30    50           20
2021/6/22 20:00        62    110           45
2021/6/22 21:00        70    122           52
2021/6/22 22:00        72    125           52
2021/6/22 23:00        74    127           60
2021/6/23 0:00        76    129           62
2021/6/23 1:00        76    133           64
2021/6/23 2:00        80    136           66
2021/6/23 3:00        82    136           68
2021/6/23 4:00        84    137           68


8 回复
#2
seven_smile2021-06-30 17:43
如上表所示:2021/6/23 1:00    72    133           64
            2021/6/23 3:00    82    536           68
            2021/6/23 4:00    84    137           770
#3
mywisdom882021-07-01 08:48
数据库设计存在缺陷
时间,电表度数,水表度数,气流量计度数
改为
编号,日期,电表读数,水表读数,电表底数,水表底数,....
1.生成空表
读取上个月的读数,当作本月的底数,
2.抄表,
填写本月的读数,
#4
seven_smile2021-07-01 12:26
回复 2楼 seven_smile
你在说什么?
#5
seven_smile2021-07-01 12:27
回复 3楼 mywisdom88
我说的是异常数据处理方法,不是我表的问题!!!!
#6
mywisdom882021-07-02 12:33
就是表设计有问题,才导致数据异常
#7
mywisdom882021-07-02 12:42
新抄表时,先统一生成1个,本月底数的新数据,然后,抄表录入对应的表号的读数
为了避免本月有的编号为抄表,可以把 本月读数=上月读数,本月底数=上月读数,为条件,生成本月读数表,
假设,本月某个表号,没有录入新读数,本月用量就是0了,这样,就算下个月再抄表,也不影响到总的用量,
从而,避免很多不必要的数据异常问题。
#8
mywisdom882021-07-02 12:50
生成新抄表数据,如
编号,日期,电表读数,水表读数,电表底数,水表底数.....电表用量,水表用量
B1001,20210701,100,100,100,100,0,0
B1002,20210701,110,110,110,110,0,0

录入数据,更新读数(电表读数,水表读数),用量计算出来
B1001,20210701,120,110,100,100,20,10   
B1002,20210701,130,125,110,110,20,15

下次,生成新抄表的数据
B1001,20210801,120,110,120,110,0,0   
B1002,20210801,130,125,130,125,0,0
下次录入相间
B1001,20210801,150,140,120,110,30,20   
B1002,20210801,150,140,130,125,20,15
不断循环



[此贴子已经被作者于2021-7-2 12:51编辑过]

#9
mywisdom882021-07-02 12:56
查询某个编号的抄表数据,就得出
select 编号,日期,电表读数,水表读数,电表底数,水表底数,电表用量,水表用量 from 抄表数据 order by 日期


编号,  日期,  电表读数, 水表读数, 电表底数, 水表底数, 电表用量, 水表用量
B1001, 20210701, 120,   110,    100,   100,   20,    10   
B1002, 20210701, 130,   125,    110,   110,   20,    15
B1001, 20210801, 150,   140,    120,   110,   30,    20   
B1002, 20210801, 150,   140,    130,   125,   20,    15


[此贴子已经被作者于2021-7-2 13:01编辑过]

1