sql >> Database teknologi >  >> RDS >> Mysql

MySQL-forespørgsel for at opdatere poster med øget dato

Prøv

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

Resultat:

|    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

Her er SQLFiddle demo

Forklaring:I en underforespørgsel med et alias t2 griber vi alle rækker, hvor dato ER NULL, sorterer dem efter id og tildel rækkenumre fra 1. MySql har desværre ikke en implementering til ROW_NUMBER() funktion, så vi gør det med en brugervariabel @n som øges, mens rækker vælges. For at initialisere denne variabel bruger vi en underforespørgsel med et alias i . Og brug CROSS JOIN for at gøre den tilgængelig for vores underforespørgsel t2 . Vi bruger derefter samme teknik (CROSS JOIN ) for at få fat i en maks. dato i tabellen og gøre den tilgængelig for hver række i vores JOIN . NÅR vi har alt det, tilføjer vi bare et linjenummer, som repræsenterer et antal dage), tilføjer det til maks. datoen og tildeler det til date kolonne i vores tabel.



  1. Krypter adgangskode i R - for at oprette forbindelse til en Oracle DB ved hjælp af RODBC

  2. Sådan laver du en indsend-knap, sletter og opdaterer på samme formular, php

  3. Bestilling af kolonnerne i MySql-tabellen ved hjælp af Python

  4. Sådan opretter du MySQL-visning