表A:
ID D_NAME D_DATE TEMP HUM
632 一号设备 2011-05-09 01:00:00.000 24 71
702 一号设备 2011-05-09 02:00:00.000 24 64
772 一号设备 2011-05-09 03:00:00.000 24 64
842 一号设备 2011-05-09 04:00:00.000 24 64
......
633 二号设备 2011-05-09 01:00:00.000 16 64
703 二号设备 2011-05-09 02:00:00.000 21 72
773 二号设备 2011-05-09 03:00:00.000 17 64
843 二号设备 2011-05-09 04:00:00.000 17 64
......
631 三号设备 2011-05-09 01:00:00.000 17 64
701 三号设备 2011-05-09 02:00:00.000 18 64
771 三号设备 2011-05-09 03:00:00.000 27 64
841 三号设备 2011-05-09 04:00:00.000 18 64
......每天每小时表A会记录各个设备的TEMP值和HUM值,TEMP和HUM值都有一个范围(TEMP最高20,HUM最高70),现在要求查询每个设备的TEMP值和HUM值是否正常。如果超过正常范围,将第一个出现的超标的数值修改为接近20的一个数值,其它的超标记录修改为正常范围内。求教该SQL语句该怎么写啊,是否要用到游标?没怎么接触过游标:(
ID D_NAME D_DATE TEMP HUM
632 一号设备 2011-05-09 01:00:00.000 24 71
702 一号设备 2011-05-09 02:00:00.000 24 64
772 一号设备 2011-05-09 03:00:00.000 24 64
842 一号设备 2011-05-09 04:00:00.000 24 64
......
633 二号设备 2011-05-09 01:00:00.000 16 64
703 二号设备 2011-05-09 02:00:00.000 21 72
773 二号设备 2011-05-09 03:00:00.000 17 64
843 二号设备 2011-05-09 04:00:00.000 17 64
......
631 三号设备 2011-05-09 01:00:00.000 17 64
701 三号设备 2011-05-09 02:00:00.000 18 64
771 三号设备 2011-05-09 03:00:00.000 27 64
841 三号设备 2011-05-09 04:00:00.000 18 64
......每天每小时表A会记录各个设备的TEMP值和HUM值,TEMP和HUM值都有一个范围(TEMP最高20,HUM最高70),现在要求查询每个设备的TEMP值和HUM值是否正常。如果超过正常范围,将第一个出现的超标的数值修改为接近20的一个数值,其它的超标记录修改为正常范围内。求教该SQL语句该怎么写啊,是否要用到游标?没怎么接触过游标:(
解决方案 »
- 关于group by分组问题
- 在数据库中,执行存储过程,插入语句,执行数据量为60万条时,CPU利用率达到100%,但是不读写磁盘。这时候该怎么处理啊?
- 求一个行列转换SQL,要求是用动态语句
- ---------- [ 寻找学习用数据库 ] -------------
- SQL2005连接空间出错
- rs.sort排序问题
- 关于行列转换再问个问题,多谢了
- 树形数据的处理
- 在SQL SERVER中有没有位运算符?
- 试用SQL语句定义上述表的结构。thank you very much.(hight mark)
- 优化下SQL提高数据查询性能
- MySql的update的表中的属性为datetime字段出错,求教
update A set TEMP = 20 + 5 * rand()
from A, (select ID, MAX(D_DATE) AS D_DATE from a where TEMP > 20 GROUP BY ID) B
where a.id = b.id
其它修改為正常范圍
update A set TEMP = 20 * rand() where TEMP > 20HUM也是同樣處理。
WHere Not exists(Select 1 From A s Where s.D_NAME=a.D_NAME And s.D_Date>A.D_Date And s.Temp>20)
And Temp>20--try
update A set TEMP = 20 + 5 * rand()
WHere Not exists(Select 1 From A s Where s.D_NAME=a.D_NAME And s.D_Date>A.D_Date And s.Temp>20)
--try 这样估计也可以,如果D_Name和D_Date不重复的话
WHere Not exists(Select 1 From A s Where s.D_NAME=a.D_NAME And s.D_Date>A.D_Date And s.Temp>20)
A set TEMP = 20 + 5 * rand()
WHere
Not exists(Select 1 From A s Where s.D_NAME=a.D_NAME And s.D_Date>A.D_Date And s.Temp>20)
select min(id) from A where TEMP>20 or HUM>70 group by convert(varchar(100),D_DATE,23)
--把其它的超标记录修改为正常范围内
update A set TEMP=20,HUM=70 where (TEMP>20 or HUM>70)
and id not in (select min(id) from A where TEMP>20 or HUM>70 group by convert(varchar(100),D_DATE,23))
--当天第一个出现的超标数值的记录改为接近20的一个数值
update A set TEMP=20+5*rand(),HUM=70+5*rand()
where id in (select min(id) from A where TEMP>20 or HUM>70 group by convert(varchar(100),D_DATE,23))
改下最后一个语句的话就可以每条记录的TEMP值分别取一个随机数。
update A set TEMP=20+abs(checksum(newid()))%6,HUM=70+abs(checksum(newid()))%6
where id in (select min(id) from A where TEMP>20 or HUM>70 group by convert(varchar(100),D_DATE,23))