sql >> Base de Datos >  >> RDS >> Mysql

Consulta MySQL para actualizar registros con fecha incrementada

Prueba

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

Aquí está SQLFiddle demostración

Explicación:En una subconsulta con un alias t2 tomamos todas las filas donde la fecha ES NULA y las ordenamos por id y asigne números de fila a partir de 1. Desafortunadamente, MySql no tiene una implementación para ROW_NUMBER() función por lo que lo hacemos con una variable de usuario @n que se incrementa mientras se seleccionan las filas. Para inicializar esta variable usamos una subconsulta con un alias i . Y usa CROSS JOIN para que esté disponible para nuestra subconsulta t2 . Luego usamos la misma técnica (CROSS JOIN ) para tomar una fecha máxima en la tabla y hacerla disponible para cada fila en nuestro JOIN . Una vez que tengamos todo eso, solo agregamos un número de línea, que representa una cantidad de días, lo agregamos a la fecha máxima y lo asignamos a date columna en nuestra tabla.