我需要帮助,我需要在select中自动增加行,除了我必须用id的每个新值重新开始增量..我已经尝试过(@cnt:= @cnt + 1)或COUNT (*)计算事件的次数,但我从未达到我想要的结果
我每次都得到
++++++++++++++++++++++++++++++
+ increment | id + value +
++++++++++++++++++++++++++++++
+ 1 | 1 | foo +
+ 2 | 1 | bar +
+ 3 | 2 | foo +
+ 4 | 3 | bar +
+ 5 | 3 | foo +
++++++++++++++++++++++++++++++
虽然我想要
++++++++++++++++++++++++++++++
+ increment | id + value +
++++++++++++++++++++++++++++++
+ 1 | 1 | foo +
+ 2 | 1 | bar +
+ 1 | 2 | foo +
+ 1 | 3 | bar +
+ 2 | 3 | foo +
++++++++++++++++++++++++++++++
答案 0 :(得分:0)
这是一种利用https://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/记录的方法的方法。它利用变量并避免任何懒惰评估问题,因为MySQL不会评估包含用户变量的表达式,直到它们被发送到客户端"。它使用函数的方法强制立即评估变量。
以下是我在sqlfiddle.com上试用的内容:
表格以及值的创建和插入。
CREATE TABLE Table1
(`Id` int, `value` varchar(3))
;
INSERT INTO Table1
(`Id`, `value`)
VALUES
(1, 'foo'),
(1, 'bar'),
(2, 'foo'),
(3, 'bar'),
(3, 'foo')
;
MySQL的SQL查询
set @increment := 0, @id := '';
select @increment, id, value
from Table1
where 0 <= greatest(
@increment := if(@id = id, @increment + 1, 1),
least(0, @id := id));
结果如下:
@increment id value
1 1 foo
2 1 bar
1 2 foo
1 3 bar
2 3 foo