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;