Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn MySQL để cập nhật bản ghi với ngày tăng dần

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy cập MySQL của MAMP từ Terminal

  2. Sắp xếp các hàng cơ sở dữ liệu có giá trị 0 sau các hàng khác 0

  3. Chọn tần suất của một kết quả có thể xuất hiện trong nhiều cột (SQL)

  4. Mysqli không cho phép nhiều truy vấn?

  5. hàm mySQL str_to_date () trả về lỗi