求一条SQL语句:
如表:
姓名     交费年度
张三     2002
张三     2003
张三     2004
张三     2005
李四     2006
李四     2007
张三     2007
张三     2008
张三     2009
要求:按人查出 最长连续交费年度。姓名     最大交费年度
张三         4
李四         2

解决方案 »

  1.   

    select 姓名,count(*) from 表 group by 姓名
      

  2.   

    select 姓名,  count(姓名) from 表 group by 姓名
      

  3.   

    select 姓名, max(cu) 最大缴费年度
      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 姓名;
      

  4.   

    select xm,a-b from (
    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分太少了 怪不的别人不肯回答你
      

  5.   

    谢谢大家的关注,回帖,
    3楼说的对,是要的最大连续参保年数。5 楼的SQL很....,我现在的水平还看不太懂,
    已经执行成功了。
    先谢谢了,这两天有时间了分析,测试一下。
      

  6.   

    貌似5楼的不对呀:
    测试表:
    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才对吧
      

  7.   

    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('张三',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
      

  8.   

    还有一种方式 可以用nvl 和lag 函数 根据 姓名group by 是否有存在断号,然后取出最小值和最大值