求一条SQL语句:
如表:
姓名 交费年度
张三 2002
张三 2003
张三 2004
张三 2005
李四 2006
李四 2007
张三 2007
张三 2008
张三 2009
要求:按人查出 最长连续交费年度。姓名 最大交费年度
张三 4
李四 2
如表:
姓名 交费年度
张三 2002
张三 2003
张三 2004
张三 2005
李四 2006
李四 2007
张三 2007
张三 2008
张三 2009
要求:按人查出 最长连续交费年度。姓名 最大交费年度
张三 4
李四 2
from (select 姓名, count(*) cu
from (select 姓名,
row_number() over(order by 姓名, rowid) rn,
rownum no
from t
order by no)
group by 姓名, (rn - no))
group by 姓名;
select xm,count(*) t,max(xh) a,min(xh) b from repeat_record group by xm)
where t!=a-b and rownum=1 order by a-b desc
xm姓名
XH最大交费年度
20分太少了 怪不的别人不肯回答你
3楼说的对,是要的最大连续参保年数。5 楼的SQL很....,我现在的水平还看不太懂,
已经执行成功了。
先谢谢了,这两天有时间了分析,测试一下。
测试表:
create table t
(
name varchar(10),
year int
)
测试数据:
insert into t values('张三',2002);
insert into t values('张三',2003);
insert into t values('张三',2004);
insert into t values('张三',2006);
insert into t values('李四',2002);
insert into t values('李四',2003);
insert into t values('张三',2007);
insert into t values('张三',2001);
insert into t values('张三',2009);
insert into t values('张三',2010);
insert into t values('张三',2011);
select name, max(year) 最大缴费年度
from (select name, count(*) year
from (select name,
row_number() over(order by name, rowid) rn,
rownum no
from t
order by no)
group by name, (rn - no))
group by name;----执行结果为
name 最大缴费年度
李四 2
张三 5
-----------------
正确的值应该是4才对吧
(
name varchar(10),
year int
)
insert into t values('张三',2002);
insert into t values('张三',2003);
insert into t values('张三',2004);
insert into t values('张三',2006);
insert into t values('张三',2007);
insert into t values('李四',2002);
insert into t values('李四',2003);
insert into t values('张三',2001);
insert into t values('张三',2009);
insert into t values('张三',2010);
insert into t values('张三',2011);--sql语句
SELECT NAME, MAX (v_count) 最大缴费年度
FROM (SELECT NAME, COUNT (*) v_count
FROM (SELECT r.*, ROWNUM rn
FROM (SELECT NAME, YEAR
FROM t
GROUP BY NAME, YEAR) r)
GROUP BY YEAR - rn, NAME)
GROUP BY NAME
--运行结果
NAME 最大缴费年度
李四 2
张三 4