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

时间:2012-02-29 10:55:58

标签: 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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

UPDATE
    TableX AS t
JOIN
    TableX AS tu
ON tu.RefID = (
    SELECT 
        MAX(prev.RefID)
    FROM 
        TableX AS prev
    WHERE 
        prev.RefID < t.RefID AND 
        prev.Status IS NOT NULL) 
SET
    t.Status = tu.Status
WHERE
    t.Status IS NULL

答案 2 :(得分:0)

你可以用光标做到这一点。 http://dev.mysql.com/doc/refman/5.0/en/cursors.html

编辑:好的,好的,我读了其他答案。方式更好。光标在这里太过分了。