Mysql 如何通过更改列值来创建与表中当前行对应的新行

Mysql 如何通过更改列值来创建与表中当前行对应的新行,mysql,sql,Mysql,Sql,我的桌子是 emp\u活动 id emp_id date time status ---|------|-------------|----------|--------- 1 | 1122 | 20-08-2019 | 09:30 AM | login 2 | 1123 | 20-08-2019 | 09:30 AM | login 5 | 1124 | 20-08-2019 | 09:30 AM | login 3 | 1125 | 20-08-

我的桌子是
emp\u活动

id  emp_id     date        time     status
---|------|-------------|----------|---------
1  | 1122 | 20-08-2019  | 09:30 AM | login
2  | 1123 | 20-08-2019  | 09:30 AM | login
5  | 1124 | 20-08-2019  | 09:30 AM | login
3  | 1125 | 20-08-2019  | 09:30 AM | login
4  | 1126 | 20-08-2019  | 09:30 AM | login
6  | 1127 | 20-08-2019  | 09:30 AM | login
7  | 1128 | 20-08-2019  | 09:30 AM | login
8  | 1129 | 20-08-2019  | 09:30 AM | login
我想在同一天晚上11点在同一个表中插入每个员工注销行,如下所示

通缉表 emp_活动


id  emp_id     date        time     status
---|------|-------------|----------|---------
1  | 1122 | 20-08-2019  | 09:30 AM | login
2  | 1123 | 20-08-2019  | 09:30 AM | login
5  | 1124 | 20-08-2019  | 09:30 AM | login
3  | 1125 | 20-08-2019  | 09:30 AM | login
4  | 1126 | 20-08-2019  | 09:30 AM | login
6  | 1127 | 20-08-2019  | 09:30 AM | login
7  | 1128 | 20-08-2019  | 09:30 AM | login
8  | 1129 | 20-08-2019  | 09:30 AM | login
9  | 1122 | 20-08-2019  | 11:00 PM | logout
10 | 1123 | 20-08-2019  | 11:00 AM | logout
11 | 1124 | 20-08-2019  | 11:00 AM | logout
12 | 1125 | 20-08-2019  | 11:00 AM | logout
13 | 1126 | 20-08-2019  | 11:00 AM | logout
14 | 1127 | 20-08-2019  | 11:00 AM | logout
15 | 1128 | 20-08-2019  | 11:00 AM | logout
16 | 1129 | 20-08-2019  | 11:00 AM | logout

您可以尝试使用
插入到。。。选择

INSERT INTO emp_activity (emp_id, date, time, status)
SELECT emp_id, date, '11:00 PM', 'logout'
FROM emp_activity
WHERE status = 'login';


这个答案假设
id
列是自动递增的,并且在插入过程中通过省略它自动填充。我不知道您是否真的在
time
列中存储了类似于
09:30am
的内容。MySQL中11PM的时间文本为24小时时间
23:00:00

只需使用
union all
,并在列中插入标量值:

select * from MyTable
union all
select id, emp_id, date, cast('11:00:00' as time), 'logout' from MyTable

如果ID列不是自动递增的,则可以使用此脚本

insert into emp_activity (id, emp_id, date, time, status)
select id + (select count(1) from emp_activity where status = 'login'), emp_id, date, '11:00 PM', 'logout'
from emp_activity
where status = 'login';

如何使用cron-job设置此查询我不理解您的评论的上下文。您是否希望从应用程序(如Java或C)执行此操作?还是直接从MySQL?在任何情况下,我建议打开一个新问题。我想在晚上11点在我的服务器上执行此查询。如果您有一个与您已问(并已回答)非常不同的后续问题,您应该打开一个新问题。