Wypróbuj
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
Wynik:
| 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
Oto SQLFiddle demo
Wyjaśnienie:W podzapytaniu z aliasem t2 pobieramy wszystkie wiersze, w których data JEST NULL, uporządkuj je według id
i przypisz numery wierszy zaczynając od 1. Niestety MySql nie ma implementacji dla ROW_NUMBER()
funkcja, więc robimy to ze zmienną użytkownika @n
który jest zwiększany podczas zaznaczania wierszy. Aby zainicjować tę zmienną, używamy podzapytania z aliasem i
. I użyj CROSS JOIN
aby udostępnić go dla naszego podzapytania t2
. Następnie używamy tej samej techniki (CROSS JOIN
), aby pobrać maksymalną datę w tabeli i udostępnić ją dla każdego wiersza w naszym JOIN
. Kiedy już mamy wszystko, po prostu dodajemy numer linii, który reprezentuje liczbę dni) dodaj go do maksymalnej daty i przypisz do date
kolumna w naszej tabeli.