高端网站建设制作设计,用c 做网站设计系统的项目作业,wordpress 批量打印文章,网站维护员工作内容在MySQL中#xff0c;可以使用自连接#xff08;self-join#xff09;来获取上一条记录的结束时间和下一条记录的开始时间#xff0c;并将它们组合成一条记录。首先#xff0c;需要为表创建一个包含记录ID和时间信息的临时表#xff0c;然后使用自连接获取相邻记录的时间…在MySQL中可以使用自连接self-join来获取上一条记录的结束时间和下一条记录的开始时间并将它们组合成一条记录。首先需要为表创建一个包含记录ID和时间信息的临时表然后使用自连接获取相邻记录的时间信息。
数据准备
-- demo.schedule definitionCREATE TABLE schedule (id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT id,start_time datetime NOT NULL,end_time datetime NOT NULL,employee_id int(10) unsigned DEFAULT NULL,PRIMARY KEY (id)
) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETlatin1;INSERT INTO demo.schedule
(start_time, end_time, employee_id)
VALUES(2023-09-08 07:50:00, 2023-09-08 12:00:00, 1);
INSERT INTO demo.schedule
(start_time, end_time, employee_id)
VALUES(2023-09-08 12:40:00, 2023-09-08 17:20:00, 1);
INSERT INTO demo.schedule
(start_time, end_time, employee_id)
VALUES(2023-09-08 18:10:00, 2023-09-08 20:30:00, 1);
以下是一个示例查询假设你的表名为schedule其中包含id和start_time、end_time字段
select * from schedule; 输出
-- 创建临时表并插入数据
CREATE TEMPORARY TABLE temp_schedule (prev_id INT,curr_id INT,prev_end_time DATETIME,curr_start_time DATETIME
);INSERT INTO temp_schedule (prev_id, curr_id, prev_end_time, curr_start_time)
SELECTt1.id AS prev_id,t2.id AS curr_id,t1.end_time AS prev_end_time,t2.start_time AS curr_start_time
FROMschedule t1
JOINschedule t2 ON t1.id t2.id - 1;
select * from temp_schedule输出
这个查询将创建一个名为temp_schedule的临时表其中包含相邻记录的ID、上一条记录的结束时间和下一条记录的开始时间。最后通过在临时表上执行查询选择上一条记录的结束时间和下一条记录的开始时间的结果。
注意这个查询假设记录按时间顺序排列并且每个记录的ID是唯一的。如果你的表结构或数据不符合这些要求你需要根据实际情况进行调整。