我简单的试了一下,思路是这样的,自己加上对null的处理(应该没问题吧)
SQL> select * from tbname;DATE1               DATE2               DATE3
------------------- ------------------- -------------------
2002-12-05 15:30:09 2002-12-04 15:30:09 2002-12-08 15:30:09
2002-11-25 15:30:33 2002-12-04 15:30:33 2002-12-05 15:30:33SQL> select decode(least(sub1,sub2,sub3),sub1,date1,sub2,date2,date3) from (select sysdate-date1 sub
1,sysdate-date2 sub2,sysdate-date3 sub3,date1,date2,date3 from tbname);DECODE(LEAST(SUB1,S
-------------------
2002-12-08 15:30:09
2002-12-05 15:30:33

解决方案 »

  1.   

    select greatest(nvl(DATE1,to_date('1900','yyyy')),
    nvl(DATE2,to_date('1900','yyyy')),nvl(DATE3,to_date('1900','yyyy'))) 
    from tabname 
    where greatest(nvl(DATE1,to_date('1900','yyyy')),
    nvl(DATE2,to_date('1900','yyyy')),nvl(DATE3,to_date('1900','yyyy'))) <= SELE_DATE;
      

  2.   

    改了一下,你自己填上nvl函数吧,看起来挺乱
    SQL> select decode(least(
      2  decode(sign(sub1),-1,3000,sub1),
      3  decode(sign(sub2),-1,3000,sub2),
      4  decode(sign(sub3),-1,3000,sub3)
      5  ),sub1,date1,sub2,date2,date3) from (
      6  select sysdate-date1 sub1,sysdate-date2 sub2,sysdate-date3 sub3,date1,date2,date3 from tbname);
    DECODE(LEAST(DECODE
    -------------------
    2002-12-05 15:30:09
    2002-12-05 15:30:33
      

  3.   

    bzszp(SongZip)大侠:
    你写的sysdate-date1 、sysdate-date2 、sysdate-date3是什么意识呀?
    谢谢了
      

  4.   

    jlandzpa(jlandzpa)大侠:
    你的思路不对!取在SELE_DATE之前,DATE1 DATE2 DATE3 中最大的那个日期!您那样写WHERE条件这条记录都娶不出来了!
      

  5.   

    我只有一个输入的sele_date,
    您怎么弄出3个了!
    我都忙晕头了!
    望大侠持教!
      

  6.   

    取在SELE_DATE之前,DATE1 DATE2 DATE3 中最大的那个日期!
    呵呵,我还是没有理解你的意思? 真笨。