sql >> Database >  >> RDS >> Mysql

MySQL-query om records bij te werken met verhoogde datum

Probeer

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

Resultaat:

|    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

Hier is SQLFiddle demo

Uitleg:In een subquery met een alias t2 pakken we alle rijen waar de datum IS NULL en rangschik ze op id en wijs rijnummers toe vanaf 1. Helaas heeft MySql geen implementatie voor ROW_NUMBER() functie dus we doen het met een gebruikersvariabele @n die wordt verhoogd terwijl rijen zijn geselecteerd. Om deze variabele te initialiseren gebruiken we een subquery met een alias i . En gebruik CROSS JOIN om het beschikbaar te maken voor onze subquery t2 . We gebruiken dan dezelfde techniek (CROSS JOIN ) om een ​​maximale datum in de tabel te pakken en deze beschikbaar te maken voor elke rij in onze JOIN . Zodra we dat allemaal hebben, voegen we gewoon een regelnummer toe, dat een aantal dagen vertegenwoordigt) voeg het toe aan de maximale datum en wijs het toe aan date kolom in onze tabel.



  1. Fout:de methode of bewerking is niet geïmplementeerd. tijdens het steigeren van MYSQL-database

  2. PostgreSQL-index versus InnoDB-index - De verschillen begrijpen

  3. UTF-16/Unicode-gegevens opslaan in SQL Server

  4. java.lang.IllegalArgumentException:kolom '_id' bestaat niet