Coba
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
Hasil:
| 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
Ini SQLFiddle demo
Penjelasan:Dalam subquery dengan alias t2 kami mengambil semua baris di mana tanggal IS NULL memesannya dengan id
dan tetapkan nomor baris mulai dari 1. Sayangnya MySql tidak memiliki implementasi untuk ROW_NUMBER()
fungsi jadi kami melakukannya dengan variabel pengguna @n
yang bertambah saat baris dipilih. Untuk menginisialisasi variabel ini kita menggunakan subquery dengan alias i
. Dan gunakan CROSS JOIN
untuk membuatnya tersedia untuk subkueri kami t2
. Kami kemudian menggunakan teknik yang sama (CROSS JOIN
) untuk mengambil tanggal maksimum dalam tabel dan membuatnya tersedia untuk setiap baris di JOIN
. kami . SETELAH kita memiliki semua itu, kita cukup menambahkan nomor baris, yang mewakili jumlah hari) tambahkan ke tanggal maksimum dan tetapkan ke date
kolom di tabel kami.