mysql简单数据查询——数采数据电量与耗料的日统计
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
前言
在数采数据已写入mysql数据库中后进行数据处理统计电量与耗料数据
由于数据库版本较低无法使用较新的函数
需要做的操作
1、查询增加列采集日期去除具体的时分秒
2、查询增加列合并不同信息产线名称、数采点位、采集日期
3、查询增加列前一行数据
4、得到结果集产线名称、数采点位、单位、采集日期、开始采集时间、结束采集时间、累计数据
基础数据1号线、2号线、14号线为产线名称总耗料、总电量为采集数据总耗料和总电量是会递增的在HMI可以进行清零操作在超过PLC该点位最大值后也会进行清零
源数据T1
步骤1date_format函数
MySQL DATE_FORMAT() 函数
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据
语法DATE_FORMAT(date,format)
date 参数是合法的日期。format 规定日期/时间的输出格式
%Y 年4 位
%m 月数值(00-12)
%d 天数值(00-31)
用 DATE_FORMAT() 函数来显示不同的格式。使用NOW()来获得当前的日期/时间
DATE_FORMAT(NOW(),'%m-%d-%Y');
select DATE_FORMAT(NOW(),'%Y-%m-%d') now_date from dual;
步骤2concat函数
MySQL concat () 函数
将多个字符串连接成一个字符串
concat(str1, str2,...) 返回结果为连接参数产生的字符串如果该函数中的任何参数为NULL返回结果为NULL
select concat("abc","123") str from dual;
步骤3、4查询中使用变量
当前行数据减去上一行数据
1、定义A.V初始值为0
2、将A表查出来将变量@A.V复制给V2将当前值V赋值给变量@A.V
3、将V-V2
第一行没有上一行所以减去后的结果还是第一行的数据
源数据
SELECT T.I,T.V,V-V2 DIFF
FROM(
SELECT A.I AS I, A.V AS V, @A.V AS V2, @A.V:= A.V
FROM
(select 11 V, 1 I from dual
union ALL
select 93 V, 2 I from dual
union ALL
select 41 V, 3 I from dual
union ALL
select 55 V, 4 I from dual
union ALL
select 17 V, 5 I from dual) A,(SELECT @A.V:=0)B
)T
完整代码
-- 步骤4
SELECT
T5.device_name, #产线名称
T5.sen_name, #数采点位
T5.sen_unit, #单位
T5.collect_date, #采集日期
min( T5.collect_time ) start_collect,#开始采集时间
max( T5.collect_time ) end_collect,#结束采集时间
round(sum(IF((T5.sen_data < T5.data_last
AND T5.device_name = T5.dev_last
AND T5.sen_name = T5.sen_last),T5.sen_data,(T5.sen_data - T5.data_last))),3) sum_data #累计数据
-- 防止清零影响数据准确性 若上一个数据大于本条数据名称相同点位相同可能是因为清零的原因
FROM(
-- 步骤3
SELECT
T4.*,
@T4.sen_data AS data_last, -- 前一行数据
@T4.sen_data := T4.sen_data,
@T4.device_name AS dev_last, -- 前一行设备
@T4.device_name := T4.device_name,
@T4.sen_name AS sen_last, -- 前一行产线
@T4.sen_name := T4.sen_name
FROM
(
-- 步骤2
SELECT
T1.*,
concat( T1.device_name, T1.sen_name, T1.collect_date ) Conbine
FROM(
-- 步骤1
SELECT T1.*,
date_format( T1.collect_time, '%Y-%m-%d' ) collect_date #采集日期
FROM T1
) T1
ORDER BY
concat( T1.device_name, T1.sen_name, T1.collect_date ) ASC,
T1.collect_time ASC
) T4,
(SELECT @T4.sen_data := 0.000, @T4.device_name := NULL, @T4.sen_name := NULL ) tmp
) T5
WHERE
T5.device_name = T5.dev_last
AND T5.sen_name = T5.sen_last
GROUP BY
T5.device_name,#设备名称
T5.sen_name, #传感器名称
T5.sen_unit, #传感器单位
T5.collect_date; #数据采集日期
得到结果