試してみてください
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
結果:
| 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
これが
説明:エイリアスt2のサブクエリで、日付がNULLであるすべての行を取得し、id
で並べ替えます。 残念ながら、MySqlにはROW_NUMBER()
の実装がありません。 関数なので、ユーザー変数@n
を使用して実行します これは、行が選択されている間にインクリメントされます。この変数を初期化するには、エイリアスi
を持つサブクエリを使用します 。そして、CROSS JOIN
を使用します サブクエリt2
で使用できるようにします 。次に、同じ手法を使用します(CROSS JOIN
)テーブルの最大日付を取得し、JOIN
のすべての行で使用できるようにします 。行番号を追加するだけで、日数を表すことができたら、それを最大日付に追加して、date
に割り当てます。 表の列。