Tenho uma tabela MySQL 5.7.
Há 9000 registros para os quais preciso definir datas consecutivas.
Os primeiros 300 registros terão 2025-01-02.
Os próximos 300 registros terão 2025-01-03.
E assim por diante até que todos os 9000 tenham sido atualizados, até a data final de 31/01/2025.
Existe uma maneira de fazer isso com uma única consulta?
Não quero fazer isso 30 vezes:
UPDATE table SET date = '2025-01-02' ORDER RAND() LIMIT 300;
Foi isso que eu tentei:
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';
Mas ao tentar isso, ele estava estabelecendo recordes para datas entre 2040 e 1930.