sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fråga för att uppdatera poster med ökat datum

Prova

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

Här är SQLFiddle demo

Förklaring:I en underfråga med ett alias t2 tar vi tag i alla rader där datum ÄR NULL sorterar dem efter id och tilldela radnummer från 1. Tyvärr har MySql ingen implementering för ROW_NUMBER() funktion så vi gör det med en användarvariabel @n som inkrementeras medan rader väljs. För att initiera denna variabel använder vi en underfråga med ett alias i . Och använd CROSS JOIN för att göra den tillgänglig för vår underfråga t2 . Vi använder sedan samma teknik (CROSS JOIN ) för att ta ett maxdatum i tabellen och göra det tillgängligt för varje rad i vår JOIN . När vi har allt det lägger vi bara till ett radnummer, som representerar ett antal dagar) lägger till det till maxdatumet och tilldelar det till date kolumn i vår tabell.



  1. php multiple choice frågesport skapare

  2. Hur konverterar man SQL Query-resultat till PANDAS Data Structure?

  3. oracle raderingsfråga tar för lång tid

  4. Hur loggar man in automatiskt i MySQL från ett skalskript?