我有一张 MySQL 5.7 表。
我需要为 9000 条记录设置连续的日期。
前 300 条记录将有 2025-01-02。
接下来的 300 条记录将是 2025-01-03。
依此类推,直到所有 9000 个都已更新,直到最后日期 2025-01-31。
有没有办法通过单个查询做到这一点?
我不想重复这个 30 次:
UPDATE table SET date = '2025-01-02' ORDER RAND() LIMIT 300;
这是我尝试过的:
SET @row_num = 0;
SET @start_date = '2025-01-02';
UPDATE `DISTRIBUTION`
JOIN (
SELECT
`email`,
@row_num := @row_num + 1 AS row_num
FROM `DISTRIBUTION`
) AS numbered_rows ON `DISTRIBUTION`.`email` =
numbered_rows.`email`
SET `DISTRIBUTION`.`date_column` = DATE_ADD(@start_date,
INTERVAL FLOOR((row_num - 1) / 300) DAY)
WHERE `LIST` = 'list1' AND `DOMAIN` = 'GM';
但尝试之后,它却将记录设置为 2040 年代和 1930 年的日期。
我看不出您的查询不起作用的任何原因,它对我来说是有效的。但您可以通过省略
JOIN
, 并直接使用来简化它@row_num
。您必须初始化
@row_num
,-1
因为计算使用递增后的值。演示
在链接的演示中,我的表格较小,因此我使用了 30 个组而不是 300 个组,但原理是一样的。