mysql触发器在不存在时插入每小时/每小时/每日平均数据;存在时更新最后一分钟/小时/天(重复密钥更新时)

时间:2017-04-05 20:17:33

标签: mysql triggers

愿意为谁提供帮助: 这是我的目的:我现在使用python从一些服务器中废弃数据并每10秒将数据存储到mysql中,我将在mysql中有4个表,原始表(s1_10s),1分钟平均值(s1_1min),1小时平均值(s1_1hr)和平均1天(s1_1天);我需要的是,当一个新的数据行插入表s1_10s时,其他3个表需要自动更新。例如,对于s1_1min表,如果插入的数据具有唯一的分钟级别,则向其插入新行;如果插入的数据具有重复的分钟级别,则取最后一分钟s1_10s中已有的数据的平均值。

我正在考虑使用触发器,但是在重复键更新语法上,经过多次尝试后,事情总是出错。任何建议将不胜感激。

insert into `s1_1min` 
select TIMESTAMP(DATE(datetime), SEC_TO_TIME(HOUR(datetime)*60*60+MINUTE(datetime)*60)) as datetime,
cast(avg(WS_mph) as decimal(6,3)) as WS_mph, 
cast(avg(WindDir) as decimal(6,0)) as WindDir, 
cast(avg(SlrkW) as decimal(6,3)) as SlrkW, 
cast(avg(SlrMJ_Tot) as decimal (6,6)) as SlrMJ_Tot, 
cast(sum(Rain_in_Tot) as decimal (6,6)) as Rain_in_Tot, 
cast(avg(AirTF) as decimal (6,2)) as AirTF, 
cast(avg(RH) as decimal (6,2)) as RH, 
cast(avg(Enc_RH) as decimal (6,2)) as Enc_RH,
cast(avg(BP_mbar) as decimal (12,3)) as BP_mbar
from `s1_10s`
where datetime>=DATE_SUB(NOW(),INTERVAL 1 MINUTE)
group by TIMESTAMP(DATE(datetime), SEC_TO_TIME(HOUR(datetime)*60*60+MINUTE(datetime)*60))
order by TIMESTAMP(DATE(datetime), SEC_TO_TIME(HOUR(datetime)*60*60+MINUTE(datetime)*60))
on duplicate key update

WS_mph = avg(WS_mph),
WindDir =avg(WindDir),
SlrkW=avg(SlrkW),
SlrMJ_Tot=avg(SlrMJ_Tot),
Rain_in_Tot=sum(Rain_in_Tot),
AirTF=avg(AirTF),
RH=avg(RH),
Enc_RH=avg(Enc_RH),
BP_mbar=avg(BP_mbar)

group by TIMESTAMP(DATE(datetime), SEC_TO_TIME(HOUR(datetime)*60*60+MINUTE(datetime)*60))
order by TIMESTAMP(DATE(datetime), SEC_TO_TIME(HOUR(datetime)*60*60+MINUTE(datetime)*60))

0 个答案:

没有答案