Zkuste
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
Výsledek:
| 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
Zde je SQLFiddle demo
Vysvětlení:V dílčím dotazu s aliasem t2 vezmeme všechny řádky, kde je datum NULL, seřadíme je podle id
a přiřaďte čísla řádků počínaje 1. MySql bohužel nemá implementaci pro ROW_NUMBER()
tak to uděláme s uživatelskou proměnnou @n
který se zvýší při výběru řádků. K inicializaci této proměnné používáme poddotaz s aliasem i
. A použijte CROSS JOIN
abychom jej zpřístupnili pro náš poddotaz t2
. Poté použijeme stejnou techniku (CROSS JOIN
), abyste získali maximální datum v tabulce a zpřístupnili jej pro každý řádek v našem JOIN
. Jakmile máme vše, jen přidáme číslo řádku, které představuje počet dní), přidáme jej k maximálnímu datu a přiřadíme k date
sloupec v naší tabulce.