根据mysql中的某种条件将一条记录拆分为两个记录

时间:2019-02-06 06:23:18

标签: mysql

我处理具有正常轮班和夜班数据的清洁数据。该表具有站点进入时间,站点退出时间,房间进入时间,房间退出时间等字段,这些字段用于计算出席时间和工作时间等kpis。在正常轮班的情况下,我会按照mysl表中的单个记录显示员工的旅程。

站点名称,员工,站点输入时间,任务,站点退出时间

如果是夜班,我想将一个记录分为两个记录。例如-一名员工于06-02-2019 21:00:00进入现场,然后于07-02-2019 04:00离开现场:00。在第一笔记录中,我想显示站点输入时间-06-02-2019 21:00:00,站点退出时间-06-02-2019 11:59:59 在第二个记录中,网站输入时间为-07-02-2019 12:00:00,网站退出时间为-07-02-2019 04:00:00

    create table smartview.test_table1(
Employee varchar(45),
site_name varchar(45),
Employee_code varchar(45),
Room_no varchar(45),
Task_type varchar(45),
Site_Enter_Time timestamp,
Room_Enter_Time timestamp,
Room_Exit_Time timestamp,
Site_Exit_Time timestamp
);


insert into smartview.test_table1(Employee,site_name,Employee_code,Room_no,Task_type,Site_Enter_Time,Room_Enter_Time,Room_Exit_Time,Site_Exit_Time) values
('Sharma','test_site1','003','Room2','floor cleaning',STR_TO_DATE('02-03-2019 14:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-03-2019 16:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-03-2019 23:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-04-2019 02:00:00','%m-%d-%Y %H:%i:%s'));

2 个答案:

答案 0 :(得分:1)

您可以使用UNION创建两行,其中输入和退出时间分布在不同的日期。简化查询:

-- shift ends on same day
SELECT employee, site_enter_time, site_exit_time
FROM test_table1
WHERE DATE(site_enter_time) = DATE(site_exit_time)

UNION ALL
-- shift ends on next day: first record
SELECT employee, site_enter_time, DATE(site_exit_time) - INTERVAL 1 SECOND
FROM test_table1
WHERE DATE(site_enter_time) = DATE(site_exit_time) - INTERVAL 1 DAY

UNION ALL
-- shift ends on next day: second record
SELECT employee, DATE(site_exit_time), site_exit_time
FROM test_table1
WHERE DATE(site_enter_time) = DATE(site_exit_time) - INTERVAL 1 DAY

答案 1 :(得分:0)

感谢您的快速回复。它为网站输入和网站剩余时间工作,但是我有多个时间戳,例如网站输入,房间输入,任务启动和所有这些退出。我想为所有时间戳实现相同的逻辑。例如-如果某位员工在01/01/2019 22:00:00进入站点并且他在23:00进入房间,并且他在02/01/2019 01:00:00开始任务。在这种情况下,我想更改任务的开始和结束时间,就像我们为站点进入和退出所做的一样。 可能会出现多种情况,例如员工在23:30进入站点,然后在第二天开始其他活动(例如1:00),然后在进入的第一个记录室中,开始任务,离开房间,完成任务应为空,然后在第二个记录这些时间戳记。

create table test_table(
Employee varchar(45),
site_name varchar(45),
Employee_code varchar(45),
Room_no varchar(45),
Task_type varchar(45),
site_entered_at timestamp,
room_entered_at timestamp,
work_started_at timestamp,
task_started_at timestamp,
task_finished_at timestamp,
work_finished_at timestamp,
room_left_at timestamp,
site_left_at timestamp
);

insert into test_table(Employee,site_name,Employee_code,Room_no,Task_type,site_entered_at,room_entered_at,work_started_at,task_started_at,task_finished_at,work_finished_at,room_left_at,site_left_at) values
('Emp1','site1','001','Room1','floor cleaning',STR_TO_DATE('02-01-2019 08:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-01-2019 08:20:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-01-2019 09:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-01-2019 10:00:00','%m-%d-%Y %H:%i:%s')
,STR_TO_DATE('02-01-2019 11:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-01-2019 12:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-01-2019 14:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-01-2019 17:00:00','%m-%d-%Y %H:%i:%s'));

insert into test_table(Employee,site_name,Employee_code,Room_no,Task_type,site_entered_at,room_entered_at,work_started_at,task_started_at,task_finished_at,work_finished_at,room_left_at,site_left_at) values
('Emp2','site1','002','Room2','bed cleaning',STR_TO_DATE('02-02-2019 08:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-02-2019 08:20:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-02-2019 09:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-02-2019 10:00:00','%m-%d-%Y %H:%i:%s')
,STR_TO_DATE('02-01-2019 11:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-01-2019 12:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-01-2019 14:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-01-2019 17:00:00','%m-%d-%Y %H:%i:%s'));


insert into test_table(Employee,site_name,Employee_code,Room_no,Task_type,site_entered_at,room_entered_at,work_started_at,task_started_at,task_finished_at,work_finished_at,room_left_at,site_left_at) values
('Emp3','site1','003','Room3','floor cleaning',STR_TO_DATE('02-03-2019 13:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-03-2019 14:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-03-2019 15:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-03-2019 16:00:00','%m-%d-%Y %H:%i:%s')
,STR_TO_DATE('02-03-2019 22:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-03-2019 23:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-03-2019 23:30:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-04-2019 01:00:00','%m-%d-%Y %H:%i:%s'));


insert into test_table(Employee,site_name,Employee_code,Room_no,Task_type,site_entered_at,room_entered_at,work_started_at,task_started_at,task_finished_at,work_finished_at,room_left_at,site_left_at) values
('Emp4','site1','004','Room4','table cleaning',STR_TO_DATE('02-04-2019 19:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-04-2019 22:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-04-2019 23:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-04-2019 23:30:00','%m-%d-%Y %H:%i:%s')
,STR_TO_DATE('02-05-2019 02:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 03:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 04:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 05:00:00','%m-%d-%Y %H:%i:%s'));

insert into test_table(Employee,site_name,Employee_code,Room_no,Task_type,site_entered_at,room_entered_at,work_started_at,task_started_at,task_finished_at,work_finished_at,room_left_at,site_left_at) values
('Emp5','site1','005','Room5','bed cleaning',STR_TO_DATE('02-04-2019 21:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-04-2019 22:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-04-2019 22:30:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-04-2019 23:00:00','%m-%d-%Y %H:%i:%s')
,STR_TO_DATE('02-04-2019 23:30:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 02:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 02:30:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 03:00:00','%m-%d-%Y %H:%i:%s'));


insert into test_table(Employee,site_name,Employee_code,Room_no,Task_type,site_entered_at,room_entered_at,work_started_at,task_started_at,task_finished_at,work_finished_at,room_left_at,site_left_at) values
('Emp6','site1','006','Room6','bed cleaning',STR_TO_DATE('02-04-2019 23:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 01:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 02:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 03:30:00','%m-%d-%Y %H:%i:%s')
,STR_TO_DATE('02-05-2019 04:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 05:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 06:00:00','%m-%d-%Y %H:%i:%s'),STR_TO_DATE('02-05-2019 07:00:00','%m-%d-%Y %H:%i:%s'));