Prøv
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
Resultat:
| 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
Her er SQLFiddle demo
Forklaring:I en underforespørgsel med et alias t2 griber vi alle rækker, hvor dato ER NULL, sorterer dem efter id
og tildel rækkenumre fra 1. MySql har desværre ikke en implementering til ROW_NUMBER()
funktion, så vi gør det med en brugervariabel @n
som øges, mens rækker vælges. For at initialisere denne variabel bruger vi en underforespørgsel med et alias i
. Og brug CROSS JOIN
for at gøre den tilgængelig for vores underforespørgsel t2
. Vi bruger derefter samme teknik (CROSS JOIN
) for at få fat i en maks. dato i tabellen og gøre den tilgængelig for hver række i vores JOIN
. NÅR vi har alt det, tilføjer vi bare et linjenummer, som repræsenterer et antal dage), tilføjer det til maks. datoen og tildeler det til date
kolonne i vores tabel.