php - 将mysql表的记录复制到下周
问题描述
我想根据具体情况将数据从 MySQL 表复制到下周。问题的示意图如下图所示。
我的表由代表日历术语的记录组成,范围为 30 分钟。所有记录都从 H:00 或 H:30 开始。表的结构在以下脚本中给出(与给定图匹配):
CREATE TABLE Table1 (
`id` INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`field1` INTEGER,
`flag` INTEGER,
`startDate` VARCHAR(256),
`endDate` VARCHAR(256)
);
INSERT INTO Table1
(`id`, `field1`, `flag`, `startDate`, `endDate`)
VALUES
(1,4,0,'2021-02-10 09:00:00','2021-02-10 09:30:00'),
(2,3,0,'2021-02-12 10:00:00','2021-02-12 10:30:00'),
(3,3,1,'2021-02-13 12:00:00','2021-02-13 12:30:00'),
(4,3,0,'2021-02-15 11:00:00','2021-02-15 11:30:00'),
(5,17,0,'2021-02-22 11:00:00','2021-02-22 11:30:00');
我想将一周的数据模式复制到下一周(没有递归调用,只有一份)。仅记录flag=0
应复制的位置(仅绿色单元格)。如果在下周的同一学期中已经存在另一条记录,则应跳过该副本。是否跳过记录 N.4 的副本或覆盖下周记录实际上并不重要,但不能有两条记录共享相同的术语。因此,除startDate
和之外的字段的值endDate
并不重要。
解决方案
您可以尝试使用插入选择
INSERT INTO Table1
(`id`, `field1`, `flag`, `startDate`, `endDate`)
select `id`, `field1`, `flag`, date_add(`startDate`, INTERVAL 7 DAY), date_add(`endDate`, INTERVAL 7 DAY)
from Table1
where flag=0
如果你想避免重复的行插入,你应该在 select 中添加 distinct 子句
INSERT INTO Table1
(`id`, `field1`, `flag`, `startDate`, `endDate`)
select DISTINCT `id`, `field1`, `flag`, date_add(`startDate`, INTERVAL 7 DAY), date_add(`endDate`, INTERVAL 7 DAY)
from Table1
where flag=0
对于重复的记录,您可能只需要没有目的地日期的记录
INSERT INTO Table1
(`id`, `field1`, `flag`, `startDate`, `endDate`)
select `id`, `field1`, `flag`, date_add(`startDate`, INTERVAL 7 DAY), date_add(`endDate`, INTERVAL 7 DAY)
from Table1
where flag=0
AND `startDate` <>date_add(`startDate`, INTERVAL 7 DAY)
推荐阅读
- javascript - 数组中的值不相加
- html - 我想将我的卡附加到另一个 html 页面
- javascript - 无法在谷歌地球中呈现 kml 文件
- java - 如何从 java 程序中重新运行 java 代码?
- angularjs - AngularJs 如何使用 angular-jwt 从 $localStorage 获取 jwt 令牌
- magento - Akeneo - 导入产品 CSV - 导入错误 - 字段“sku”是预期的,提供的字段是
- linux - 如何找到正在运行的 Docker 容器的所有镜像标签?
- javascript - 每次显示一个输入时的表单输入问题(Vue)
- javascript - 来自网页的社交分享
- r - “如何在 R studio 中更改关键字颜色?”