各位大侠:
问题如下:有表X
date     name instead
20070116 a    b
20070116 b    c
20070116 c    d
20070116 d    e
20070116 g    h
20070116 h    i
20070116 i    j
20070116 m    n代表意义: a<-b b<-c c<-d d<-e => a<-e
          g<-h h<-i i<-j      => g<-j用sql语句select出如下结果:
date     name instead
20070116 a    e
20070116 g    j
20070116 m    n谢谢!!!!

解决方案 »

  1.   

    用start with ... connect by...
      

  2.   

    SQL> select * from x;MYDATE      MYNAME INSTEAD
    ----------- ------ -------
    2007-1-16   a      b
    2007-1-16   b      c
    2007-1-16   c      d
    2007-1-16   d      e
    2007-1-16   g      h
    2007-1-16   h      i
    2007-1-16   i      j
    2007-1-16   m      n8 rows selectedSQL> 
    SQL> SELECT mydate, MIN(myname), MAX(INSTEAD)
      2    FROM (SELECT * FROM x ORDER BY mydate, myname)
      3   GROUP BY mydate, ascii(myname) - rownum
      4  /MYDATE      MIN(MYNAME) MAX(INSTEAD)
    ----------- ----------- ------------
    2007-1-16   a           e
    2007-1-16   g           j
    2007-1-16   m           n
      

  3.   

    duanzilin,您的方法好象只对有序数据有效!事实上数据不一定是有序的,比如下面的例子:
    MYDATE      MYNAME INSTEAD
    ----------- ------ -------
    2007-1-16   d      p
    2007-1-16   e      x
    2007-1-16   p      e
    2007-1-16   x      q
    2007-1-16   ha     zj
    2007-1-16   zj     bi
    2007-1-16   bi     ag
    2007-1-16   m      n
    要得到如下结果:
    MYDATE      MYNAME INSTEAD
    ----------- ------ -------
    2007-1-16   d      q
    2007-1-16   ha     ag
    2007-1-16   m      n
      

  4.   

    帮你提个醒,还有种情况就是有多个分支怎么办?如
    2007-1-16   d      p
    2007-1-16   e      x
    2007-1-16   p      e
    2007-1-16   x      q
    2007-1-16   ha     zj
    2007-1-16   zj     bi
    2007-1-16   bi     ag
    2007-1-16   m      n
    2007-1-16   p      n
    这种情况应该出这样的结果吧:
    2007-1-16   d      q
    2007-1-16   d      n
    2007-1-16   ha     ag
    2007-1-16   m      n
    很关注
      

  5.   

    SQL语句无法实现?一定要写程序?
      

  6.   

    貌似可以写个函数,我用的是oracle