Mysql使用上一条记录中的值更新记录

use*_*443 2 mysql

我有下表,我要做的是更新,例如,RefIDs 3-14具有相同的状态值"已添加"作为前一个值.我想这样做,直到达到下一个完成的值.因此,当遇到"已添加"时,它会更新下面所有具有"已添加"空值的行,直到它到达具有已填充状态的下一个RefID,然后更新下一批值.可以这样做吗?任何帮助将不胜感激.我正在寻找这个动态,因为我不想手动更新,例如,Status ="Added",其中RefID是3.

RefID Status

    1 Null

    2 Added

    3 Null

    4 Null

    5 Changed

    6 Null

    7 Null

    RefID Status
      1 Null

      2 Added

      3 Added

      4 Added

      5 Changed

      6 Changed

      7 Changed
RefID Status
    1 Null

    2 Added

    3 Null

    4 Null

    5 Changed

    6 Null

    7 Null

我想要实现的是:


RefID Status

    1 Null

    2 Added

    3 Added

    4 Added

    5 Changed

    6 Changed

    7 Changed

    RefID Status
      1 Null

      2 Added

      3 Null

      4 Null

      5 Changed

      6 Null

      7 Null
RefID Status
    1 Null

    2 Added

    3 Added

    4 Added

    5 Changed

    6 Changed

    7 Changed

Dev*_*art 5

试试这个查询 -

UPDATE refs_table t1
  JOIN (
    SELECT RefID, @s:=IF(Status IS NULL, @s, Status) Status
      FROM (SELECT * FROM refs_table ORDER BY RefID) r,
    (SELECT @s:=NULL) t
  ) t2
  ON t1.RefID = t2.RefID
SET t1.Status = t2.Status
Run Code Online (Sandbox Code Playgroud)

  • 如果能对每个子语句中发生的情况进行解释,我们将不胜感激。 (2认同)