多重自​​动增量

时间:2018-05-23 12:59:04

标签: mysql sql database

我需要帮助,我需要在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   +
++++++++++++++++++++++++++++++

1 个答案:

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