Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL заявка за актуализиране на записи с увеличена дата

Опитайте

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 | ДАТА |---------------------| 10500 | 2013-08-18 || 10501 | 2013-08-16 || 10502 | 2013-08-17 || 10503 | 2013-08-19 || 10504 | 20.08.2013 | -- датата е назначена| 10505 | 21.08.2013 | -- датата е назначена

Ето SQLPiddle демонстрация

Обяснение:В подзаявка с псевдоним t2 ние грабваме всички редове, където датата е NULL, ги подреждаме по id и задайте номера на редове, започващи от 1. За съжаление MySql няма реализация за ROW_NUMBER() функция, така че го правим с потребителска променлива @n което се увеличава, докато се избират редове. За да инициализираме тази променлива, използваме подзаявка с псевдоним i . И използвайте CROSS JOIN за да го направим достъпен за нашата подзаявка t2 . След това използваме същата техника (CROSS JOIN ), за да вземете максимална дата в таблицата и да я направите достъпна за всеки ред в нашия JOIN . След като имаме всичко, просто добавяме номер на ред, който представлява брой дни) добавяме го към максималната дата и присвояваме на date колона в нашата таблица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отстраняване на неизправности при репликацията на MySQL:Част първа

  2. Не може да се изтегля двоичен файл в PHP

  3. Laravel Migration поле за добавяне, след като данните са в таблицата?

  4. Как да инсталирам com.mysql.jdbc.Driver Не можах да намеря драйвер с име на клас:com.mysql.jdbc.Driver?

  5. PHP клас за пагинация