MYSQL-在表中生成子集序列

MYSQL-在表中生成子集序列,mysql,sequence,subset,Mysql,Sequence,Subset,我有下表 Id Value 1 3 1 12 1 67 2 7 2 99 5 30 5 33 5 4 5 87 5 12 5 1 我想把它更新成这个表 Id UniqueIdBySubSet Value 1 1 3 1 2 12 1 3 67 2

我有下表

Id   Value
1     3
1     12
1     67
2     7
2     99
5     30
5     33
5     4
5     87
5     12
5     1
我想把它更新成这个表

Id  UniqueIdBySubSet    Value
1           1             3
1           2             12
1           3             67
2           1             7
2           2             99
5           1             30
5           2             33
5           3             4
5           4             87
5           5             12
5           6             1
我在SO上找到了完美的线程,但它是针对mssql的。我使用mysql 4.1.10

可以在此处找到其他线程:

有人知道我如何在mysql中做到这一点吗

谢谢,,
让·弗朗索瓦(Jean Francois)

写一个快速脚本。用php编写的代码应该不到10行。

我想你会发现它很有用。简而言之:您不能只在一个查询中完成,但可以在两个查询中完成(将数据加载到新表中并执行insert语句)。

您好,我已经尝试并测试了您的答案,但它不起作用。这是我在上面的例子中得到的值。1,1,31,2,12,1,3,672,1,72,2,995,3,15,4,45,5,125,6,305,7,335,8,87我已经用它工作了大约20分钟,但我似乎没有让它工作。这个主意看起来不错,但我认为它可以奏效。如果你有任何想法,请随意添加更多信息。我已经能够使它工作。但是第一个索引不再是1,而是0。设置@r:=-1;设置@id:=-1;更新mytable m SET m.UniqueIdBySubSet=CASE当@id=0时,然后@r:=(@id:=m.id)-m.id当m.id=@id时,然后@r:=@r+1 ELSE@r:=(@id:=m.id)-m.id按m.id结束顺序,m.Value;谢谢你的意见。真的很感激。
SET  @r := 0;
SET  @id := 0;
UPDATE  mytable m
SET     m.UniqueIdBySubSet = IF(@id = id, @r := @r + 1, @r := (@id := id) - id)
ORDER BY
        id, value;