用到如下语句:
select A,B,C from tableName where 
TO_CHAR(A,'yyyy-MM-dd') like '2009-11-09' and B = '600' and A = (select max(A) from tableName where B = '600')
or TO_CHAR(A,'yyyy-MM-dd') like '2009-11-09' and B = '603' and A = (select max(A) from tableName where B = '603')
or TO_CHAR(A,'yyyy-MM-dd') like '2009-11-09' and B = '606' and A = (select max(A) from tableName where B = '606')
or TO_CHAR(A,'yyyy-MM-dd') like '2009-11-09' and B = '609' and A = (select max(A) from tableName where B = '609')
or TO_CHAR(A,'yyyy-MM-dd') like '2009-11-09' and B = '611' and A = (select max(A) from tableName where B = '611')上述代码中,重复部分比较多,能否简化??

解决方案 »

  1.   

    select A,B,C from tableName where 
    TO_CHAR(A,'yyyy-MM-dd') like '2009-11-09' and B in('600','603','606','609','611') and A = (select max(A) from tableName where B in('600','603','606','609','611')) 
      

  2.   

    select A,B,C from tableName a where 
    TO_CHAR(A,'yyyy-MM-dd') = '2009-11-09'
    and b in('600','603','606','609','611')
    and a=(select max(a) from tablename where b=a.b)
      

  3.   

    等价于select a,b,c from (
      select a.*,rank()over(partition by b order by a desc)rk
      from tablename a)
    where rk=1
      and a>=date'2009-11-9' and a<date'2009-11-10'
      and b in('600','603','606','609','611')
      

  4.   

    SELECT A, B, C
      FROM TABLENAME A
     WHERE TO_CHAR(A, 'YYYY-MM-DD') = '2009-11-09'
       AND B IN ('600', '603', '606', '609', '611')
       AND A = (SELECT MAX(A)
                  FROM TABLENAME
                 WHERE B = A.B
                   AND TO_CHAR(A, 'YYYY-MM-DD') = '2009-11-09')
    到现在也没搞清楚,楼主到底是什么意思?还有表中列值的唯一性是否存在。
    建议描述下意图,呵呵。
      

  5.   

    是 FROM TABLENAME 不是FROM TABLENAME A