日期:2014-05-17 浏览次数:20894 次
f1 f2
1 c
12 a
3 b
11 a
4 b
5 a
2 b
7 c
8 d
9 c
10 c
6 a
f1 f2
1 c
2 b
3 b
4 b
5 a
6 a
7 c
8 d
9 c
10 c
11 a
12 a
f1 f2 sub
1 c 0 --f2相邻分组只有1行,所以为0
4 b 2 --f2相邻分组有3行,都是b,对应f1分别是2、3、4,则f1只留下最大的4,sub = 4-2 = 2
6 a 1 --f2相邻分组有2行,都是a,对应f1分别是5、6,则f1只留下最大的6,sub = 6-5 = 1
7 c 0 --f2相邻分组只有1行,所以为0
8 d 0 --f2相邻分组只有1行,所以为0
10 c 1 --f2相邻分组有2行,都是c,对应f1分别是9、10,则f1只留下最大的10,sub = 10-9 = 1
12 a 1 --f2相邻分组有2行,都是a,对应f1分别是11、12,则f1只留下最大的12,sub = 12-11 = 1
create table hap
(f1 int, f2 varchar(5))
insert into hap
select 1, 'c' union all
select 12, 'a' union all
select 3, 'b' union all
select 11, 'a' union all
select 4, 'b' union all
select 5, 'a' union all
select 2, 'b' union all
select 7, 'c' union all
select 8, 'd' union all
select 9, 'c' union all
select 10, 'c' union all
select 6, 'a'
with t1 as
(select a.f1,
a.f2
from hap a
left join hap b on a.f1=b.f1-1
where b.f1 is null or a.f2<>b.f2
),
t2 as
(select f1,f2,row_number() over(order by f1) 'rn'