ms-sql 预警信息(欢迎加入)
实时信息:
判断过程:查找各县中属于该县的水位站,水位数据距离现在时间在“预警时间周期”内满足条件的站点,取最严重的作为
该县的警戒级别,乡也一样。
乡一级:水位超过警戒水位0.5m
乡二级:水位接近警戒水位0.4m
县一级:水位超过警戒水位0.8m
县二级:水位达到警戒水位
县三级:水位接近警戒水位0.6m
预警时间周期:48小时
/* 参考信息:
w:当前水位,j:警戒水位
超过警戒水位0.5米,w > j + 0.5满足条件
到达警戒水位,则 w >= j满足条件
接近警戒水位0.5米,则 w >= j - 0.5则满足条件
此处的警戒水位0.5 是取上面的:0.5m,0.4m,0.8m,0.6m这些数值。
*/
相关表
监测站站点信息表:stcd_info
行政区划代码表:adcd_code
水位预警模型表:riverway_stcd_alarmnorm
预警参数表:earlyWarningPara
预警信息表(历史表):earlyWarningInfo
其他表:实时河道水情表:st_river_r
提示:st_river_r表每隔一段时间有一条新的数据插入,新数据去和riverway_stcd_alarmnorm、earlyWarningPara比较
为了方便我把这几个表数据提取出来:
riverway_stcd_alarmnorm:
-------90800001(站点代码),1.5(警戒水位),3(危险水位)
earlyWarningPara:预警等级,超过水位多少,预警周期(当前时间减去st_river_r数据时间≤预警周期)
------- '乡一级',0.5,48
------- '乡二级',0.4,48
------- '县一级',0, 48
------- '县二级',0.8,48
------- '县三级',0.6,48
例如:st_river_r表来了一条新数据数据为:90800001,2010-7-2 11:17:35,3.1,这条时间在预警周期内,水位是3.1m
水位去匹配riverway_stcd_alarmnorm表,属于危险水位,这里请看上面的注释参考信息,3.1-3=0.1,属于县一级。
--说明:
同一个监测站点stcd相同,预警周期内。
1.1、st_river_r表TM字段判断没有新的变化,数据不变。
1.2、有更高的预警出现,则往earlyWarningInfo新添加一天数据。
2.1、预警时间外,则往earlyWarningInfo新添加一天数据。
最终列表形式为表数据是earlyWarningInfo里的:
预警级别 预警区域 灾害情况 预警响应情况
县三级 **县 水位... 新预警
乡一级 **乡 水位 .... 响应启动
sql:
create table stcd_info
(
id int primary key
,stcd char(8) not null
,stName char(40)
,Adcd char(15)
,stType int
)
insert into stcd_info(id,stcd,stName,Adcd,stType)
select 101,'90800001','娘热村','5401021006',4
union all
select 102,'90800002',新仓沟','5401260102',4
create table adcd_code
(
Adcd char(15) primary key
,pAdcd char(15)
,[Name] varchar(60)
,adType tinyint
)
insert into adcd_code(Adcd,pAdcd,[Name],adType)
select '5401021006','5401021000','娘热',4
union all
select '5401021000','5401020000','娘热乡,3
union all
select '5401020000','5401000000','城关区',2
union all
select '5401260102','5401260100','新仓',4
union all
select '5401260100','5401260000','德庆镇',3
union all
select '5401260000','5401000000','达孜县',2
union all
select '5401000000','5401000000','拉萨市',1
create table riverway_stcd_alarmnorm
(
stcd char(8) not null
,wrz numeric(18,3) --警告水位
,dpz numeric(18,3) --危险水位
)
insert into riverway_stcd_alarmnorm(stcd,wrz,dpz)
select '90800001',1.5,3
union all
select '90800002',1.75,2.5
create table earlyWarningPara
(
eId int identity(1,1) primary key
,eRank nvarchar(20) --乡一级、乡二级、县一级、县二级、县三级
,eOverWWL decimal --超过警戒水位
,eCycle float --预警周期:小时
)
insert into earlyWarningPara(eRank,eOverWWL,eCycle)
select '乡一级',0.5,48
union all
select '乡二级',0.4,48
union all
select '县一级',0,48
union all
select '县二级',0.8,48
union all
select '县三级',0.6,48
union all
create table earlyWarningInfo
(
eAdcd char(15) --区划代码
,eRank nvarchar(20) --预警级别
,eInfo nvarchar(300) --灾害情况
,eStep int --新预警、内部预警、发布预警、响应启动、响应结束
,eOccureTime datetime --发生降雨或水位超标时间
,eIEWTime datetime --内部预警时间
,ePEWTime datetime --发布预警时间
,eResponseStartTime datetime --响应启动时间
,eResponseFinishTime datetime --响应结束时间
)
create table st_river_r
(
stcd char(8) not null
,TM datetime --数据时间
,Z numeric(18,3) --水位
)
insert into st_river_r(stcd,TM,Z)
select '90800001','2010-7-2 11:11:47',1
union all
select '90800001','2010-7-1 11:11:47',1
union all
select '90800001','2010-7-2 11:11:47',1
union all
select '90800001','2010-6-29 11:11:47',1
union all
select '90800001','2010-6-30 11:11:47',1
union all
select '90800002','2010-7-2 11:11:47',1
union all
select '90800002','2010-7-2 11:11:47',1
union all
select '90800002','2010-7-1 11:11:47',1
union all
select '90800002','2010-6-29 11:11:47',1
union all
select '90800002','2010-6-30 18:11:47',1
union all