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'))
------解决方案--------------------
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;