表 tabA
ID(PK)               INFOID                 CRETIME
1                     1                    2008-1-1
2       1    2008-1-2
3                     2    2007-1-2
4                     3                    2003-2-1
5                     1    2008-5-2
6                     2                    2008-1-2
7                     2                    2008-6-5
--------------------------------------------------------
上面数据将返回
2,3两条记录
1.DISTINCT的返回表tabA中所有满足下面条件的INFOID字段 
在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录2.DISTINCT的返回表tabA中所有满足下面条件的INFOID字段 
在相同INFOID字段记录中的,CRETIME字段的最新日期,大于等于2008-5-1的纪录

解决方案 »

  1.   

    1
    select infoid,max(cretime) cretime
              from taba
              group by infoid
          having max(cretime)<=to_date('2008-5-1','yyyy-mm'dd')
    2
    select infoid,max(cretime) cretime
              from taba
              group by infoid
          having max(cretime)>=to_date('2008-5-1','yyyy-mm'dd')
      

  2.   

    1.select infoid from tab1
        group by infoid
          having max(CRETIME)<=to_date('2008-5-1','yyyy-mm-dd')
          
    2.select infoid from tab1
        group by infoid
          having max(CRETIME)>=to_date('2008-5-1','yyyy-mm-dd')  
      

  3.   

    表 tabA 
    ID(PK)              INFOID                CRETIME 
    1                    1                    2008-1-1 
    2       1   2008-1-2 
    3                    2   2007-1-2 
    4                    3                    2003-2-1 
    5                    1   2008-5-2 
    6                    2                    2008-1-2 
    7                    2                    2008-6-5 
    -------------------------------------------------------- 
    上面数据将返回 
    2,3两条记录 
      

  4.   

    SELECT INFOID,MAX(CRETIME) CRETIME
              FROM TABA
              GROUP BY INFOID
          HAVING MAX(CRETIME)<=TO_DATE('2008-5-1','YYYY-MM'DD')SELECT INFOID,MAX(CRETIME) CRETIME
              FROM TABA
              GROUP BY INFOID
          HAVING MAX(CRETIME)>=TO_DATE('2008-5-1','YYYY-MM'DD')
      

  5.   

    那如果合并怎么写啊。..........................下面的需求啊!!!!!!!!!!!!!表 tabA
    ID(PK)              INFOID(数据保证唯一) CRETIME      NAME
    1                    1                    2008-1-1       XX1
    2             2      2008-1-1       XX2
    3                    3      2008-1-1       XX3
    4                    9                    2008-1-1       XX4
    sql1.返回表tabA中所有满足下面条件的INFOID,NAME字段 
    CRETIME字段的日期,小于等于2008-5-1的纪录
    sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段 
    CRETIME字段的日期,大于等于2008-5-1的纪录
     
    表 tabB
    ID(PK)              INFOID                CRETIME 
    1                    1                    2008-1-1 
    2            1      2008-1-2 
    3                    2     2007-1-2 
    4                    3                    2003-2-1 
    5                    1     2008-5-2 
    6                    2                    2008-1-2 
    7                    2                    2008-6-5 
    -------------------------------------------------------- sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,大于等于2008-5-1的纪录 
    最终需要的结果是:
    sql5.去掉重复INFOID字段的 sql1+sql3 
    sql6.去掉重复INFOID字段的 sql2+sql4 
    注:tabB.INFOID 是 tabA.INFOID的外键 以上面数据为例将返回:
    -------------------------------------------------------
    INFOID         NAME
    2        XX1
    3        XX2
    9              XX4
      

  6.   

    那如果合并怎么写啊。..........................下面的需求啊!!!!!!!!!!!!! 
    表 tabA 
    ID(PK)              INFOID(数据保证唯一) CRETIME      NAME 
    1                    1                    2008-1-1      XX1 
    2                    2                    2008-1-1      XX2 
    3                    3                    2008-1-1      XX3 
    4                    9                    2008-1-1      XX4 
    sql1.返回表tabA中所有满足下面条件的INFOID,NAME字段 
    CRETIME字段的日期,小于等于2008-5-1的纪录 
    sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段 
    CRETIME字段的日期,大于等于2008-5-1的纪录 表 tabB 
    ID(PK)              INFOID                CRETIME 
    1                    1                    2008-1-1 
    2                    1                    2008-1-2 
    3                    2                    2007-1-2 
    4                    3                    2003-2-1 
    5                    1                    2008-5-2 
    6                    2                    2008-1-2 
    7                    2                    2008-6-5 
    -------------------------------------------------------- sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,大于等于2008-5-1的纪录 
    最终需要的结果是: 
    sql5.去掉重复INFOID字段的 sql1+sql3 
    sql6.去掉重复INFOID字段的 sql2+sql4 
    注:tabB.INFOID 是 tabA.INFOID的外键 
    以上面数据为例将返回: 
    ------------------------------------------------------- 
    INFOID        NAME 
    2              XX1 
    3              XX2 
    9              XX4 
      

  7.   

    那如果合并怎么写啊。..........................下面的需求啊!!!!!!!!!!!!! 
    表 tabA 
    ID(PK)              INFOID(数据保证唯一) CRETIME      NAME 
    1                    1                    2008-1-1      XX1 
    2                    2                    2008-1-1      XX2 
    3                    3                    2008-1-1      XX3 
    4                    9                    2008-1-1      XX4 
    sql1.返回表tabA中所有满足下面条件的INFOID,NAME字段 
    CRETIME字段的日期,小于等于2008-5-1的纪录 
    sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段 
    CRETIME字段的日期,大于等于2008-5-1的纪录 表 tabB 
    ID(PK)              INFOID                CRETIME 
    1                    1                    2008-1-1 
    2                    1                    2008-1-2 
    3                    2                    2007-1-2 
    4                    3                    2003-2-1 
    5                    1                    2008-5-2 
    6                    2                    2008-1-2 
    7                    2                    2008-6-5 
    -------------------------------------------------------- sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,大于等于2008-5-1的纪录 
    最终需要的结果是: 
    sql5.去掉重复INFOID字段的 sql1+sql3 
    sql6.去掉重复INFOID字段的 sql2+sql4 
    注:tabB.INFOID 是 tabA.INFOID的外键 
    以上面数据为例将返回: 
    ------------------------------------------------------- 
    INFOID        NAME 
    2              XX1 
    3              XX2 
    9              XX4 
      

  8.   

    ------------------------------------------------------- 
    INFOID        NAME 
    2              XX1 
    3              XX2 
    9              XX4 你的结果按你的逻辑根本出不来这样的的结果
    首先看a表
    ID(PK)              INFOID(数据保证唯一) CRETIME      NAME 
    1                    1                    2008-1-1      XX1 
    2                    2                    2008-1-1      XX2 
    3                    3                    2008-1-1      XX3 
    4                    9                    2008-1-1      XX4 
    info id=1对应name=xx1
    你的结果却是
    2对应xx1
    3应该是对应xx3
    你的结果却是对应xx2
      

  9.   

    首先sql1出来的结果,就是a表的所有纪录(都小于5.1)
    sql 3出来的infoid为3
    sql5 =去掉sql1+sql3里重复的,那就余下1,2,9sql2没有结果
    sql4出来就是infoid 为1,2的
    sql6 应该是要么没有结果,要么就是1,2最后sql5+sql6
    也最多就是1,2,9
    你怎么会出来2,3,9而且name也不一样
      

  10.   

    非常感谢 hebo2005  啊!我表达的不太好!是因为我自己想的不是很清楚啊!
    现在重新说下啊!表 tabA 
    ID(PK)              INFOID(数据保证唯一) CRETIME      NAME 
    1                    1                    2008-1-1      XX1 
    2                    2                    2008-1-1      XX2 
    3                    3                    2008-1-1      XX3 
    4                    9                    2008-1-1      XX4 
    sql1.返回表tabA中所有满足下面条件的INFOID,NAME字段 
    CRETIME字段的日期,小于等于2008-5-1 且未在tabB表中出现的纪录 sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段 
    CRETIME字段的日期,大于2008-5-1 且未在tabB表中出现的纪录  
    表 tabB 
    ID(PK)              INFOID                CRETIME 
    1                    1                    2008-1-1 
    2                    1                    2008-1-2 
    3                    2                    2007-1-2 
    4                    3                    2003-2-1 
    5                    1                    2008-5-2 
    6                    2                    2008-1-2 
    7                    2                    2008-6-5 
    -------------------------------------------------------- 
    sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,大于2008-5-1的纪录 
    最终需要的结果是: 
    sql5.sql1+sql3 
    sql6.sql2+sql4 
    注:tabB.INFOID 是 tabA.INFOID的外键 INFOID        NAME 
    2              XX2 
    3              XX3 
    9              XX4 
      

  11.   

    非常感谢 hebo2005  啊! 我表达的不太好!是因为我自己想的不是很清楚啊! 
    现在重新说下啊! 
    表 tabA 
    ID(PK)              INFOID(数据保证唯一) CRETIME      NAME 
    1                       1                    2008-1-1      XX1 
    2                       2                    2008-1-1      XX2 
    3                       3                    2008-1-1      XX3 
    4                       9                    2008-1-1      XX4 
    sql1.返回表tabA中所有满足下面条件 的INFOID,NAME字段 
    CRETIME字段的日期,小于等于2008-5-1 且未在tabB表中出现的纪录 sql2.返回表tabA中所有满足下面条件的INFOID,NAME字段 
    CRETIME字段的日期,大于2008-5-1 且未在tabB表中出现的纪录  
    表 tabB 
    ID(PK)              INFOID                CRETIME 
    1                       1                    2008-1-1 
    2                       1                    2008-1-2 
    3                       2                    2007-1-2 
    4                       3                    2003-2-1 
    5                       1                    2008-5-2 
    6                       2                    2008-1-2 
    7                       2                    2008-6-5 
    -------------------------------------------------------- 
    sql3.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录 sql4.DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,大于2008-5-1的纪录 
    最终需要的结果是: 
    sql5.sql1+sql3 
    sql6.sql2+sql4 
    注:tabB.INFOID 是 tabA.INFOID的外键 INFOID        NAME 
    2              XX2 
    3              XX3 
    9              XX4 
      

  12.   

    你这个sql5.sql1+sql3是什么意思?
    sql 1
    select infoid, name
           from taba a
      where cretime<=to_date('2008-5-1','yyyy-mm-dd')
            and not exists (
                           select 1
                              from tabb b.
                           where a.infoid=b.infoid and a.crtime=b.cretime
                           )sql 2
    select infoid, name
           from taba a
      where cretime>=to_date('2008-5-1','yyyy-mm-dd')
            and not exists (
                           select 1
                              from tabb b.
                           where a.infoid=b.infoid and a.crtime=b.cretime
                           )其实sql1 和sql2不就是一句嘛 把日期条件去掉出来的结果是一样的,可以合并的sql3 sql41.select infoid from tabb
        group by infoid
          having max(CRETIME)<=to_date('2008-5-1','yyyy-mm-dd')
          
    2.select infoid from tabb
        group by infoid
          having max(CRETIME)>=to_date('2008-5-1','yyyy-mm-dd')  
      

  13.   

    返回表tabA中所有满足下面条件 的INFOID,NAME字段 
    CRETIME字段的日期,小于等于2008-5-1 且未在tabB表中出现的纪录 
    DISTINCT的返回表tabB中所有满足下面条件的INFOID字段 
    在相同INFOID字段记录中的,CRETIME字段的最新日期,小于等于2008-5-1的纪录你这个sql5.sql1+sql3是什么意思? 就是上面两个结果的UNION!或者用右连接应该也可以吧!tabB.INFOID 是 tabA.INFOID的外键 
      

  14.   

    sql5.sql1+sql3
    select infoid, name
           from taba a
      where cretime<=to_date('2008-5-1','yyyy-mm-dd')
            and not exists (
                           select 1
                              from tabb b.
                           where a.infoid=b.infoid and a.crtime=b.cretime
                           )
    union all
    select infoid, name
           from taba a
           where exists
                 (       
                   select 1 from tabb b
                      where b.infoid=a.infoid
                      group by infoid
                      having max(CRETIME)<=to_date('2008-5-1','yyyy-mm-dd'))sql6.sql2+sql4
    select infoid, name
           from taba a
      where cretime>=to_date('2008-5-1','yyyy-mm-dd')
            and not exists (
                           select 1
                              from tabb b.
                           where a.infoid=b.infoid and a.crtime=b.cretime
                           )
    union all
    select infoid, name
           from taba a
           where exists
                 (       
                   select 1 from tabb b
                      where b.infoid=a.infoid
                      group by infoid
                      having max(CRETIME)>=to_date('2008-5-1','yyyy-mm-dd'))
      

  15.   

    用右连接可以吗?因为tabB.INFOID 是 tabA.INFOID的外键 
      

  16.   

    用右连接也是可以的
    sql 1
    select infoid, name
           from taba a,tabb b
      where cretime<=to_date('2008-5-1','yyyy-mm-dd')
            and  a.infoid=b.infoid(+) and a.crtime=b.cretime(+)
            and b,infoid is null
                        
      

  17.   

    1.select infoid from tabb
        group by infoid
          having max(CRETIME)<=to_date('2008-5-1','yyyy-mm-dd')
          
    2.select infoid from tabb
        group by infoid
          having max(CRETIME)>=to_date('2008-5-1','yyyy-mm-dd') 这个不行吗?
      

  18.   

    非常感谢  C'est la Vie 啊最后一个问题select * from tab_A
    where credate <=
    To_date('2008-08-22','yyyy-mm-dd')
    为什么我这里写小于等于8-22日,却只显示 8月22日以前的不显示等于8月22日的!
    select * from tab_A
    where credate >
    To_date('2008-08-22','yyyy-mm-dd')然而我这里写大于8月22日的却把8月22日的都显示出来了...
      

  19.   

    因为To_date('2008-08-22','yyyy-mm-dd')  
    实际上是2008-08-22 00:00:00
    所以当<=实际上基本上不会包括8-22这一天的,除非你的credate正好是2008-08-22 00:00:00
    同理,当>时,只要你的credate是2008-08-22 00:00:01,就符合条件,会显示出来的
    正确的应该这样几种方法trunc(credate) <= 
    To_date('2008-08-22','yyyy-mm-dd') trunc(credate) >
    To_date('2008-08-22','yyyy-mm-dd') 
    或者credate <= 
    To_date('2008-08-22','yyyy-mm-dd') +0.99999

    credate <= 
    To_date('2008-08-22 23:59:59','yyyy-mm-dd hh24:mi:ss')

    credate <= 
    To_date('2008-08-23','yyyy-mm-dd')

    to_char(credate,'yyyy-mm-dd')<='2008-08-22'
      

  20.   

    C'est la Vie
    感谢啊。。我 iq有问题 55
    我的qq是923570482
    msn是[email protected]
    希望能成为朋友啊