简体   繁体   English

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

[英]Mysql Updating a record with a value from the previous record

I have the following table, and what I'm trying to do is to update, for example, RefIDs 3-14 with the same Status value "Added" as the previous value. 我有下表,我要做的是更新,例如,RefIDs 3-14具有相同的状态值“已添加”作为前一个值。 I want to do this until it reaches the next completed value. 我想这样做,直到达到下一个完成的值。 So when it encounters "Added", it updates all rows below that have a null with "Added" until it reaches the next RefID that has a populated Status, and subsequently updates the next batch of values. 因此,当它遇到“已添加”时,它会更新下面所有具有“已添加”空值的行,直到它到达具有已填充状态的下一个RefID,然后更新下一批值。 Can this be done? 可以这样做吗? Any help would be greatly appreciated. 任何帮助将不胜感激。 I'm looking for this to be dynamic, as I don't want to manually update, say, Status = "Added" where RefID is 3. 我正在寻找这个动态,因为我不想手动更新,例如,Status =“Added”,其中RefID是3。

RefID Status

    1 Null

2 Added
3 Null
4 Null
5 Changed
6 Null
7 Null

    2 Added
    3 Null
    4 Null
    5 Changed
    6 Null
    7 Null

2 Added
3 Null
4 Null
5 Changed
6 Null
7 Null

    2 Added
    3 Null
    4 Null
    5 Changed
    6 Null
    7 Null

2 Added
3 Null
4 Null
5 Changed
6 Null
7 Null

    2 Added
    3 Null
    4 Null
    5 Changed
    6 Null
    7 Null

2 Added
3 Null
4 Null
5 Changed
6 Null
7 Null

    2 Added
    3 Null
    4 Null
    5 Changed
    6 Null
    7 Null

2 Added
3 Null
4 Null
5 Changed
6 Null
7 Null

    2 Added
    3 Null
    4 Null
    5 Changed
    6 Null
    7 Null

2 Added
3 Null
4 Null
5 Changed
6 Null
7 Null

    2 Added
    3 Null
    4 Null
    5 Changed
    6 Null
    7 Null

What I want to achieve is this: 我想要实现的是:


RefID Status

    1 Null

2 Added
3 Added
4 Added
5 Changed
6 Changed
7 Changed

    2 Added
    3 Added
    4 Added
    5 Changed
    6 Changed
    7 Changed

2 Added
3 Added
4 Added
5 Changed
6 Changed
7 Changed

    2 Added
    3 Added
    4 Added
    5 Changed
    6 Changed
    7 Changed

2 Added
3 Added
4 Added
5 Changed
6 Changed
7 Changed

    2 Added
    3 Added
    4 Added
    5 Changed
    6 Changed
    7 Changed

2 Added
3 Added
4 Added
5 Changed
6 Changed
7 Changed

    2 Added
    3 Added
    4 Added
    5 Changed
    6 Changed
    7 Changed

2 Added
3 Added
4 Added
5 Changed
6 Changed
7 Changed

    2 Added
    3 Added
    4 Added
    5 Changed
    6 Changed
    7 Changed

2 Added
3 Added
4 Added
5 Changed
6 Changed
7 Changed

    2 Added
    3 Added
    4 Added
    5 Changed
    6 Changed
    7 Changed

Try this query - 试试这个查询 -

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
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

You can do it with a cursor. 你可以用光标做到这一点。 http://dev.mysql.com/doc/refman/5.0/en/cursors.html http://dev.mysql.com/doc/refman/5.0/en/cursors.html

EDIT: Okay, okay, I read the other answers. 编辑:好的,好的,我读了其他答案。 Way better. 方式更好。 Cursor is overkill here. 游标在这里太过分了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM