Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta MySQL para atualizar registros com data incrementada


Tentar
UPDATE Table1 t1 JOIN
(
  SELECT id, @n := @n + 1 rnum
    FROM Table1 CROSS JOIN (SELECT @n := 0) i
   WHERE date IS NULL
   ORDER BY id
) t2 ON t1.id = t2.id CROSS JOIN
(
  SELECT MAX(date) date FROM Table1
) q
   SET t1.date = q.date + INTERVAL t2.rnum DAY

Resultado:
|    ID |       DATE |
----------------------
| 10500 | 2013-08-18 |
| 10501 | 2013-08-16 |
| 10502 | 2013-08-17 |
| 10503 | 2013-08-19 |
| 10504 | 2013-08-20 | --  date has been assigned
| 10505 | 2013-08-21 | --  date has been assigned

Aqui está SQLFiddle demonstração

Explicação:Em uma subconsulta com um alias t2, pegamos todas as linhas em que date IS NULL as ordenamos por id e atribua números de linha começando em 1. Infelizmente, o MySql não tem uma implementação para ROW_NUMBER() função, então fazemos isso com uma variável de usuário @n que é incrementado enquanto as linhas são selecionadas. Para inicializar esta variável usamos uma subconsulta com um alias i . E use CROSS JOIN para disponibilizá-lo para nossa subconsulta t2 . Em seguida, usamos a mesma técnica (CROSS JOIN ) para pegar uma data máxima na tabela e disponibilizá-la para cada linha em nosso JOIN . Uma vez que tenhamos tudo isso, basta adicionar um número de linha, que representa um número de dias) adicione-o à data máxima e atribua a date coluna em nossa tabela.