需求是这样的:表A、B的结完全全相同 : ID(主键) CARDASN(卡号) COUNT(记数)TIME(入库时间)例如:表A  ID      CARDASN      COUNT      TIME
      1          001          1       08-04-05 09:09;09
      2          001          2       08-04-06 09:09:08
      3          002          1       08-03-07 14:11:01表B  ID      CARDASN       COUNT     TIME
      1          001          4       08-04-05 10:11:54
      2          002          3       08-03-09 06:11:19现在想找出 两个表中每个(重复的)卡号记数是否出现断号,出现了把它找出来,在时间上的约束是6天前到3天的记录里出现的断号才找出来。例如 找卡号为001的断号 结果应该是     ID     START    END      
     1         3      3    START 为断号的开始号   END 为断号的结束号请问该如何实现

解决方案 »

  1.   

    有高人总结了,请参见:http://lastwinner.itpub.net/post/7102/260759
      

  2.   

    结果集中st(开始号),ed(结束号)
    select * from (select CARDASN,CNT st,lead(CNT) over(partition by CARDASN order by CNT) ed
    from (
    select CARDASN,count CNT from A where time > sysdate -6 and time < sysdate -3
    union
    select CARDASN,count CNT from B where time > sysdate -6 and time < sysdate -3))
    where ed-st >1 
      

  3.   

    不是已经在子查询中union了吗?我的理解,你的两张表的数据都是同一类数据,可以合并到一张表上来的。
    所以先Union一下,再按照一张表的方式去处理。
      

  4.   

    另外,关于顺序的问题,只需要调整一下 over(partition by CARDASN order by CNT)就可以了,
    是不是楼主没有说清楚需求啊!LZ到底想要什么?
      

  5.   


    实际测试的结果就是我说的情况,虽然是做了union,但并没按预期的逻辑进行 !