首页 > 数据库 >MySql使用存储过程拼接sql,查询当前数据与下一条数据时间差,union all合并查询结果集

MySql使用存储过程拼接sql,查询当前数据与下一条数据时间差,union all合并查询结果集

时间:2022-09-07 16:47:16浏览次数:64  
标签:info NAME union TIMESTAMP sql 查询 v1 ._ va1

 1 CREATE PROCEDURE `th_line_step_beat_state`(in table_name VARCHAR(255),in line_id INT,in SOUTIME datetime,in DESTIME datetime)
 2 BEGIN
 3     -- 参数(表名,id,开始时间,结束时间)
 4     -- 查询当前数据与下一条数据的时间差  
 5     SET @sqlcmd = concat('select b.`CODE`,b.`NAME`,b.tm_station_id,b.line_id,d.SOUTIME1,d.DESTIME1,
 6     UNIX_TIMESTAMP(d.DESTIME1) - UNIX_TIMESTAMP(d.SOUTIME1),b.qty,
 7     case 
 8             when d.va1=d.v1 and d.va1 = 1 then (UNIX_TIMESTAMP(d.DESTIME1) - UNIX_TIMESTAMP(d.SOUTIME1)) / b.qty 
 9      end beat,
10     b.qty_tag,d.va1,d.v1,
11     case 
12             when d.va1=d.v1 and d.va1 = 1  then ''节拍'' 
13             when d.va1 = 1 and d.v1 = 0 then ''工作时间'' 
14             when d.va1 = 0 and d.v1 = 1 then ''等待时间'' end remarks
15     from 
16     (
17         select a._NAME,a.SOUTIME1,a.DESTIME1,a.va1,a.v1
18         from (
19                  select info._NAME,info._TIMESTAMP SOUTIME1,
20                  lead(info._TIMESTAMP,1) over (PARTITION by info._NAME order by info._TIMESTAMP) DESTIME1,
21                  info._VALUE va1,
22                  lead(info._VALUE,1) over (PARTITION by info._NAME order by info._TIMESTAMP) v1
23                  from ',table_name,' info 
24                  where info._NAME not like ''%CROSS%'' and 
25                  info.`_TIMESTAMP` >= ','''',SOUTIME,'''','
26                  and info.`_TIMESTAMP` <= ','''',DESTIME,'''','   
27         ) a where a.DESTIME1 is not null 
28          union all
29             (select a._NAME,a.SOUTIME1,a.DESTIME1,a.va1,a.v1
30             from (
31                      select info._NAME,info._TIMESTAMP SOUTIME1,
32                      lead(info._TIMESTAMP,1) over (PARTITION by info._NAME order by info._TIMESTAMP) DESTIME1,
33                      info._VALUE va1,
34                      lead(info._VALUE,1) over (PARTITION by info._NAME order by info._TIMESTAMP) v1
35                      from ',table_name ,' info 
36                      where info._NAME not like ''%CROSS%'' and 
37                      info.`_TIMESTAMP` >= ','''',SOUTIME,'''','
38                      and info.`_TIMESTAMP` <= ','''',DESTIME,'''',' 
39                      and info._VALUE = 1 
40             ) a where a.DESTIME1 is not null)
41     ) d left join tm_station_step b on b.`CODE` = d._name  
42     where b.LINE_ID = ','''',LINE_ID,'''',' 
43     order by d._NAME,    d.SOUTIME1;');
44     -- select @sqlcmd;
45     PREPARE stmt FROM @sqlcmd;
46 
47     EXECUTE stmt;
48 
49     DEALLOCATE PREPARE stmt;
50 
51 end

 

CREATE DEFINER=`root`@`%` PROCEDURE `th_line_step_beat_state`(in table_name VARCHAR(255),in line_id INT,in SOUTIME datetime,in DESTIME datetime)BEGIN-- 参数(表名,产线id,开始时间,结束时间)-- 查询当前数据与下一条数据的时间差  SET @sqlcmd = concat('select b.`CODE`,b.`NAME`,b.tm_station_id,b.line_id,d.SOUTIME1,d.DESTIME1,UNIX_TIMESTAMP(d.DESTIME1) - UNIX_TIMESTAMP(d.SOUTIME1),b.qty,case when d.va1=d.v1 and d.va1 = 1 then (UNIX_TIMESTAMP(d.DESTIME1) - UNIX_TIMESTAMP(d.SOUTIME1)) / b.qty  end beat,b.qty_tag,d.va1,d.v1,case when d.va1=d.v1 and d.va1 = 1  then ''节拍'' when d.va1 = 1 and d.v1 = 0 then ''工作时间'' when d.va1 = 0 and d.v1 = 1 then ''等待时间'' end remarksfrom (select a._NAME,a.SOUTIME1,a.DESTIME1,a.va1,a.v1from ( select info._NAME,info._TIMESTAMP SOUTIME1, lead(info._TIMESTAMP,1) over (PARTITION by info._NAME order by info._TIMESTAMP) DESTIME1, info._VALUE va1, lead(info._VALUE,1) over (PARTITION by info._NAME order by info._TIMESTAMP) v1 from ',table_name,' info  where info._NAME not like ''%CROSS%'' and  info.`_TIMESTAMP` >= ','''',SOUTIME,'''',' and info.`_TIMESTAMP` <= ','''',DESTIME,'''','   ) a where a.DESTIME1 is not null  union all(select a._NAME,a.SOUTIME1,a.DESTIME1,a.va1,a.v1from ( select info._NAME,info._TIMESTAMP SOUTIME1, lead(info._TIMESTAMP,1) over (PARTITION by info._NAME order by info._TIMESTAMP) DESTIME1, info._VALUE va1, lead(info._VALUE,1) over (PARTITION by info._NAME order by info._TIMESTAMP) v1 from ',table_name ,' info  where info._NAME not like ''%CROSS%'' and  info.`_TIMESTAMP` >= ','''',SOUTIME,'''',' and info.`_TIMESTAMP` <= ','''',DESTIME,'''','  and info._VALUE = 1 ) a where a.DESTIME1 is not null)) d left join tm_station_step b on b.`CODE` = d._name  where b.LINE_ID = ','''',LINE_ID,'''',' order by d._NAME,d.SOUTIME1;');-- select @sqlcmd;PREPARE stmt FROM @sqlcmd;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end

标签:info,NAME,union,TIMESTAMP,sql,查询,v1,._,va1
From: https://www.cnblogs.com/RainHouse/p/16666336.html

相关文章

  • pgsql函数
    1.字符串替换 selectreplace('替换前字符串','需替换字符串','替换字符串'); 例:把2替换为5  selectreplace('123','2','5'); 2.字符串截取 selectsubs......
  • 【Mysql】MyISAM 和 InnoDB 的区别
    先看下《高性能MySQL》中对于他们的评价:InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的......
  • 3. mysql--Navicat进行ssh通道连接MySQL数据库
    1.Navicat进行ssh通道连接MySQL数据库首先,你得有一个Navicat,这个不用多说第二步,打开Navicat点击连接按钮。这个就不上图了,直接到如下页面填写信息,连接名随便起第三步:点......
  • 二进制安装mysql5.7
    1.安装相关包[root@CentOS8~]#yuminstalllibaionumactl-libs-y2.创建用户和用户组[root@CentOS8~]#groupaddmysql[root@CentOS8~]#useradd-r-gmysql......
  • Mysql异常——com.alibaba.druid.sql.parser.ParserException
    今天写业务逻辑时候,写完发现控制台出现报错,但是程序可以正常运行。在控制台报错中发现是因为SQL模糊查询格式问题修改模糊查询写法后成功解决该报错......
  • PostgreSQL数据库、模式、表、空间、用户间的关系
    PostgreSQL数据库、模式、表、空间、用户间的关系(1)DB实例与schema:模式是数据库实例的逻辑分割。数据库是被模式(schema)来切分的,一个数据库至少有一个模式,所有数据库......
  • linux环境配置 (redis、jdk、nginx、mysql)
    linux环境配置环境准备服务器:腾讯云服务器操作系统:centos8.0终端控制器:finalshell3.9.34redis7.0.4jdk1.8.0nginx-1.21.3mysql8.0.30redis安装创建或选......
  • PostgreSQL-数据类型3
    一、数组类型PostgreSQL允许将表的列定义为可变长度的多维数组。可以创建任何内置或用户定义的基本类型、枚举类型、复合类型、范围类型或域的数组。为了说明数组类型的......
  • LINUX系统中查询Oracle数据库的归档日志目录
    注:查询Linux系统中Oracle数据库的归档日志方法,不同的安装目录使用不同的方法,一下有两种方式,其中一种是我目前使用的数据库未查到归档才换的第二种方式。-----方式一:查询数......
  • SQLyog企业版
    一、下载与安装1、SQLyog的下载链接:https://www.aliyundrive.com/s/11ZuFqB1z4E提取码:63fu2、SQLyog的安装    双击下载程序,可以选择默认安装.    64......