Hãy thử
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
Kết quả:
| 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
Đây là SQLFiddle bản demo
Giải thích: Trong một truy vấn con có bí danh t2, chúng tôi lấy tất cả các hàng có ngày LÀ ĐẦY ĐỦ sắp xếp chúng theo id
và gán số hàng bắt đầu từ 1. Rất tiếc, MySql không có triển khai cho ROW_NUMBER()
để chúng tôi làm điều đó với một biến người dùng @n
được tăng lên trong khi các hàng được chọn. Để khởi tạo biến này, chúng tôi sử dụng một truy vấn con có bí danh i
. Và sử dụng CROSS JOIN
để cung cấp nó cho truy vấn con t2
của chúng tôi . Sau đó, chúng tôi sử dụng kỹ thuật tương tự (CROSS JOIN
) để lấy một ngày tối đa trong bảng và làm cho nó có sẵn cho mọi hàng trong JOIN
của chúng tôi . ONce chúng tôi có tất cả những gì chúng tôi chỉ thêm một số dòng, đại diện cho một số ngày) thêm nó vào ngày tối đa và gán cho date
trong bảng của chúng tôi.