with t as
 (select to_date('2013/10/10', 'yyyy/mm/dd') date1, '1' nam
    from dual
  union all
  select to_date('2013/10/12', 'yyyy/mm/dd') date1, '2' nam
    from dual
  union all
  select to_date('2013/10/15', 'yyyy/mm/dd') date1, '3' nam from dual)
select *
  from t
 where date1 = decode((select count(1)
                        from t
                       where t.date1 = to_date('2013/10/11', 'yyyy/mm/dd')),
                      0,
                      (select min(date1)
                         from t
                        where t.date1 > to_date('2013/10/11', 'yyyy/mm/dd')),
                      to_date('2013/10/11', 'yyyy/mm/dd'))

解决方案 »

  1.   


    WITH T AS
     (SELECT TO_DATE('2013/12/10', 'yyyy/mm/dd') DATE1
        FROM DUAL
      UNION ALL
      SELECT TO_DATE('2013/12/26', 'yyyy/mm/dd') DATE1
        FROM DUAL
      UNION ALL
      SELECT TO_DATE('2013/12/29', 'yyyy/mm/dd') DATE1
        FROM DUAL)
    SELECT (SELECT MIN(T.DATE1) FROM T WHERE T.DATE1 >= SYSDATE) FROM DUAL;
      

  2.   

    WITH T AS
     (SELECT TO_DATE('2013/12/10', 'yyyy/mm/dd') DATE1
        FROM DUAL
      UNION ALL
      SELECT TO_DATE('2013/12/26', 'yyyy/mm/dd') DATE1
        FROM DUAL
      UNION ALL
      SELECT TO_DATE('2013/12/29', 'yyyy/mm/dd') DATE1
        FROM DUAL)
    SELECT (SELECT MIN(T.DATE1)
              FROM T
             WHERE TO_CHAR(T.DATE1, 'yyyymmdd') >= TO_CHAR(SYSDATE, 'yyyymmdd'))
      FROM DUAL;
      

  3.   

    WITH T AS
     (SELECT TO_DATE('2013/12/10', 'yyyy/mm/dd') DATE1
        FROM DUAL
      UNION ALL
      SELECT TO_DATE('2013/12/26', 'yyyy/mm/dd') DATE1
        FROM DUAL
      UNION ALL
      SELECT TO_DATE('2013/12/29', 'yyyy/mm/dd') DATE1
        FROM DUAL)
    SELECT (SELECT MIN(T.DATE1)
              FROM T
             WHERE TO_CHAR(T.DATE1, 'yyyymmdd') >= TO_CHAR(SYSDATE, 'yyyymmdd'))
      FROM DUAL;谢谢啦