Probeer
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
Resultaat:
| 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
Hier is SQLFiddle demo
Uitleg:In een subquery met een alias t2 pakken we alle rijen waar de datum IS NULL en rangschik ze op id
en wijs rijnummers toe vanaf 1. Helaas heeft MySql geen implementatie voor ROW_NUMBER()
functie dus we doen het met een gebruikersvariabele @n
die wordt verhoogd terwijl rijen zijn geselecteerd. Om deze variabele te initialiseren gebruiken we een subquery met een alias i
. En gebruik CROSS JOIN
om het beschikbaar te maken voor onze subquery t2
. We gebruiken dan dezelfde techniek (CROSS JOIN
) om een maximale datum in de tabel te pakken en deze beschikbaar te maken voor elke rij in onze JOIN
. Zodra we dat allemaal hebben, voegen we gewoon een regelnummer toe, dat een aantal dagen vertegenwoordigt) voeg het toe aan de maximale datum en wijs het toe aan date
kolom in onze tabel.