现有一个表EQP_TRANS_ODS
会记录机台状态,
机况种类:IDLE/DOWN/RUN,
有Start_time,END_TIME,KEEP_TIME;
但是这个表有个问题,每天07:30,会自动截断重新生成一行数据,
例如机况Run时间为Start_time:6:00至End_time:9:00,
到7:30截断,会显示两行,
显示为
Run 6:00-7:30 keep_time:1.5 hr,
Run 7:30-9:00 keep_time:1.5 hr ,怎么通过SQL语法将两行字段,拼接为一行 6:00-9:00 keep_time:3 hr
SQL拼接语法,怎么拼接时间
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
Java智慧阁 2022-07-09 17:33关注比如当前测试表数据如下:

查询效果如下:

对应测试DDL语句:
CREATE TABLE `eqp_trans_ods` ( `id` int(11) DEFAULT NULL, `type` varchar(24) DEFAULT NULL, `Start_time` time DEFAULT NULL, `END_TIME` time DEFAULT NULL, `KEEP_TIME` float(2,1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;对应测试DML语句:
-- ---------------------------- -- Records of eqp_trans_ods -- ---------------------------- INSERT INTO `eqp_trans_ods` VALUES (1, 'IDLE', '06:00:00', '07:30:00', 1.5); INSERT INTO `eqp_trans_ods` VALUES (2, 'IDLE', '07:30:00', '09:00:00', 1.5); INSERT INTO `eqp_trans_ods` VALUES (3, 'DOWN', '05:00:00', '07:30:00', 2.5); INSERT INTO `eqp_trans_ods` VALUES (4, 'DOWN', '07:30:00', '09:00:00', 1.5); INSERT INTO `eqp_trans_ods` VALUES (5, 'RUN', '08:00:00', '10:30:00', 2.5); INSERT INTO `eqp_trans_ods` VALUES (6, 'RUN', '10:30:00', '14:30:00', 4.0);效果执行语句:
SELECT a.type, -- min( a.Start_time ) Start_time, date_format(min(Start_time),'%H:%i') Start_time, -- 取值开始时间 最小值 -- 显示小时和分钟 -- 格式显示日期/时间数据参考:https://www.w3school.com.cn/sql/func_date_format.asp -- max( a.END_TIME ) END_TIME, date_format(max(END_TIME),'%H:%i') END_TIME, -- 取值最大时间 结束时间 sum( a.KEEP_TIME ) KEEP_TIME , -- 求和累计 concat(type,' ',date_format(min(Start_time),'%H:%i'),'-',date_format(max(END_TIME),'%H:%i'),' keep_time',':',sum( a.KEEP_TIME ),' hr') printResult -- 拼接结果 FROM EQP_TRANS_ODS a GROUP BY a.type ORDER BY a.type DESC;本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报