Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Permintaan MySQL untuk memperbarui catatan dengan tanggal yang bertambah

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pip install MySQL-python kembali tidak dapat menemukan vcvarsall.bat

  2. Mengembalikan hasil kueri dalam urutan yang telah ditentukan sebelumnya

  3. MySQL:Hapus baris yang berisi parameter tertentu dan lebih tua dari satu hari

  4. Mencari saran tentang kueri video terkait pada sistem video yang ditandai

  5. mySQL:Bergabung dengan tiga tabel - bagaimana caranya?