我有一个项目管理表,其中包含1000个任务/记录,每个任务/记录都有一个动态的starting_date和ending_date列。这些日期的值是通过获取一个静态的项目“上线”日期(例如2022-10-01),然后减去每个记录的task_offset_days值(例如-211),从而得到starting_date的值。结束日期通过一个days_to_complete列计算,该列具有例如60天的值,如果将其加到starting_date上,就得到了最终的ending_date。
示例:上线日期= 2022-10-01,偏移-211天,得到starting_date = '2022-03-04',再加上days_offset的值60,得到ending_date = 2022-05-03。
这里的问题是:
我想将这1000条记录复制到另一个表中,并在此过程中根据另一个上线日期更新starting_date和ending_date的值。考虑到我要复制和编辑1000条记录,我该如何以最高效的方式做到这一点?
当前的复制查询:
@live_date = '2022-10-01'; // 上线日期
INSERT INTO `new_task_table` (
`property_id`, // 唯一标识符,在原始表中不存在
`status`,
`task_desc`,
`phase`,
`workstream`,
`task_level`,
`task_owner_group`,
`start_date`, // = 上线日期 - 偏移量
`end_date`, // = 开始日期 + 完成天数
`offset_days`, // 例如 -211(注意:可以低于/高于零:-211或120)
`days_to_complete`, // 例如 60
`created_at`
)
SELECT
'31',
`status`,
`task_desc`,
`phase`,
`workstream`,
`task_level`,
`task_owner_group`,
`start_date`,
`end_date`,
`offset_days`,
`days_to_complete`,
'2022-01-01 00:00:00' // 查询执行的日期
FROM `old_task_table`; Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这可能比你想象的简单。你只需将值传递给
SELECT@live_date = '2022-10-01'; // 上线日期 INSERT INTO `new_task_table` ( `property_id`, // 唯一标识符,在原始表中不存在 `status`, `task_desc`, `phase`, `workstream`, `task_level`, `task_owner_group`, `start_date`, // = 上线日期 - 偏移量 `end_date`, // = 开始日期 + 完成天数 `offset_days`, // 例如 -211(注意:可以是负数或正数:-211 或 120) `days_to_complete`, // 例如 60 `created_at` ) SELECT '31', `status`, `task_desc`, `phase`, `workstream`, `task_level`, `task_owner_group`, DATE_ADD(@live_date, INTERVAL offset_days DAY) AS start_date, DATE_ADD(@live_date,INTERVAL offset_days + days_to_complete DAY) AS end_date, `offset_days`, `days_to_complete`, '2022-01-01 00:00:00' // 查询执行日期 FROM `old_task_table`;