求一SQL语句:
line day adr
A    1   a
A    2   a
A    3   b
A    4   a

。 
得出结果
A  2  a
A  1  b
A  1  a
中间值为(相同line,adr时)连续的天数

解决方案 »

  1.   

    存储过程不难啊
    读出所有的记录,循环判断
    设置全局变量line和adr,累加器
    如果line和adr相同:累加
    如果不同,将line,累加值,adr记录起来,更新line,adr的值,累加器清零
      

  2.   

    to lihui_shine
       这样的话要嵌套循环,感觉性能很差,有没有更好的办法,比如聚合函数
      

  3.   

    试试这个可以吗
    select line,count(1),adr
    from (select line,day,adr,
    (case lag(line,1,'') over(order by day)=line and lag(adr,1,'') over(order by day)=adr then lag(day,1,1) over(order by day) else day end) aa
    from table order by day)
    group by aa order by max(day);
      

  4.   

    select line,count(1),adr
    from (select line,day,adr,
    (case when lag(line,1,'') over(order by day)=line and lag(adr,1,'') over(order by day)=adr then lag(day,1,1) over(order by day) else day end) aa
    from table order by day)
    group by aa order by max(day);
      

  5.   

    superhsj的应该不对的,day这个字段应该有可能相同的
      

  6.   

    有可能相同的话,就加个rownum,一样可以出来
      

  7.   

    而且既然是跟上一条做判断,就一定要有个顺序,如果day有可能相同的话,按什么排序呢?
      

  8.   

    -- 连续数问题:
    SQL> SELECT * FROM TT;LINE       DAYS ADR
    ---- ---------- ---
    A             1 A
    A             2 A
    A             3 B
    A             4 ASQL> SELECT LINE, COUNT(1) COUNTS, ADR
      2    FROM (SELECT TT.*,
      3                 ROWNUM - ROW_NUMBER() OVER(PARTITION BY LINE, ADR ORDER BY ROWNUM) RN
      4            FROM TT) ZZ
      5   GROUP BY LINE, ADR, RN;LINE     COUNTS ADR
    ---- ---------- ---
    A             2 A
    A             1 B
    A             1 A
      

  9.   

    今天测试时发现9楼的sql在某些特定情况下会出现误判,比如把第二条和第三条记录换一下位置,会出现把后三条合并