Prova
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
Här är SQLFiddle demo
Förklaring:I en underfråga med ett alias t2 tar vi tag i alla rader där datum ÄR NULL sorterar dem efter id
och tilldela radnummer från 1. Tyvärr har MySql ingen implementering för ROW_NUMBER()
funktion så vi gör det med en användarvariabel @n
som inkrementeras medan rader väljs. För att initiera denna variabel använder vi en underfråga med ett alias i
. Och använd CROSS JOIN
för att göra den tillgänglig för vår underfråga t2
. Vi använder sedan samma teknik (CROSS JOIN
) för att ta ett maxdatum i tabellen och göra det tillgängligt för varje rad i vår JOIN
. När vi har allt det lägger vi bara till ett radnummer, som representerar ett antal dagar) lägger till det till maxdatumet och tilldelar det till date
kolumn i vår tabell.