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で確認してください。

説明

2 つの変数が必要ですか。まずはカウンターです。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 に答える