0

一个表的值如下,相同的数字可以按任何顺序重复。100,102,101 是重复值,对于这些值,只有当它们是连续值时,我才需要生成相同的数字。

100
101
102
100
100
103
104
102
102
105
106
101
101

输出应该是

100    1
101    2
102    3
100    4
100    4
103    5
104    6
102    7
102    7
105    8
106    9
101    10
101    10

请帮忙查询

4

1 回答 1

2

在这里您的查询:

SET @t1=0;
SET @tp=-1;

select   
  @t1 := @t1 + (case when @tp=n then 0 else 1 end) as c, 
  n,
  @tp := n
from nums
order by n;

检查它:http ://sqlfiddle.com/#!2/b136e/9/2

解释

你需要两个变量。第一个是柜台。第二个变量是记住以前的值。对于您显示计数器的每一行。当前一个值不等于行值时,您增加计数器。

测试:

create table nums( n int );
insert into nums values (100), (101), (101), (102);

结果:

| C |   N | @TP := N |
----------------------
| 1 | 100 |      100 |
| 2 | 101 |      101 |
| 2 | 101 |      101 |
| 3 | 102 |      102 |
于 2012-09-05T16:42:09.273 回答